4,MySQL数据库的设计

准备阶段

创建用户

CREATE USER 'luck'@'localhost' IDENTIFIED BY '1111';
GRANT ALL PRIVILEGES ON test_db.* TO 'luck'@'localhost';

root修改普通用户权限

GRANT ALL PRIVILEGES ON . TO 'existinguser'@'%' IDENTIFIED BY 'password';

刷新

FLUSH PRIVILEGES;

删除用户

DROP USER 'Luck'@'localhost';

创建数据库

CREATE DATABASE shop_app
CHARACTER SET utf8mb4
COLLATE utf8mb4_general_ci;

设计数据表

  • 进入数据库
    use shop_app
  1. 用户表(users)

    • 字段
      • user_id:INT,自增主键,用户唯一标识。
      • username:VARCHAR(50),用户名。
      • password:VARCHAR(255),密码(加密存储)。
      • phone_number:VARCHAR(20),手机号码。
      • wechat_id:VARCHAR(50),微信 ID(可选)。
      • created_at:TIMESTAMP,用户注册时间。
    • 说明:存储用户的基本信息,用于用户注册和登录。
    • 代码
    CREATE TABLE users (
    	user_id INT AUTO_INCREMENT PRIMARY KEY,
    	username VARCHAR(50) NOT NULL,
    	password VARCHAR(255) NOT NULL,
    	phone_number VARCHAR(20),
    	wechat_id VARCHAR(50),
    	created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    );
    
  2. 商品分类表(product_categories)

    • 字段
      • category_id:INT,自增主键,分类唯一标识。
      • category_name:VARCHAR(50),分类名称(如日用品、食品、农资等)。
    • 说明:用于对商品进行分类管理。
    • 代码:
    CREATE TABLE product_categories (
     category_id INT AUTO_INCREMENT PRIMARY KEY,
     category_name VARCHAR(50) NOT NULL
     );
    
  3. 商品表(products)

    • 字段
      • product_id:INT,自增主键,商品唯一标识。
      • category_id:INT,外键关联 product_categories 表的 category_id,商品所属分类。
      • product_name:VARCHAR(100),商品名称。
      • description:TEXT,商品描述。
      • price:DECIMAL(10, 2),商品价格。
      • stock:INT,库存数量。
      • image_path:VARCHAR(255),商品图片路径。
      • created_at:TIMESTAMP,商品创建时间。
    • 说明:存储商品的详细信息。
    • 代码:
    CREATE TABLE products (
     product_id INT AUTO_INCREMENT PRIMARY KEY,
     category_id INT,
     product_name VARCHAR(100) NOT NULL,
     description TEXT,
     price DECIMAL(10, 2),
     stock INT,
     image_path VARCHAR(255),
     created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
     FOREIGN KEY (category_id) REFERENCES product_categories(category_id)
    );
    
  4. 购物车表(carts)

    • 字段
      • cart_id:INT,自增主键,购物车记录唯一标识。
      • user_id:INT,外键关联 users 表的 user_id,购物车所属用户。
      • product_id:INT,外键关联 products 表的 product_id,购物车中的商品。
      • quantity:INT,商品数量。
    • 说明:记录用户购物车中的商品信息。
    • 代码:
    CREATE TABLE carts (
     cart_id INT AUTO_INCREMENT PRIMARY KEY,
     user_id INT,
     product_id INT,
     quantity INT,
     FOREIGN KEY (user_id) REFERENCES users(user_id),
     FOREIGN KEY (product_id) REFERENCES products(product_id)
     );
    
  5. 订单表(orders)

    • 字段
      • order_id:INT,自增主键,订单唯一标识。
      • user_id:INT,外键关联 users 表的 user_id,订单所属用户。
      • total_price:DECIMAL(10, 2),订单总价。
      • payment_method:VARCHAR(50),支付方式。
      • status:VARCHAR(20),订单状态(如已下单、已发货、已送达等)。
      • created_at:TIMESTAMP,订单创建时间。
    • 说明:存储订单的基本信息。
    • 代码:
    CREATE TABLE orders (
     order_id INT AUTO_INCREMENT PRIMARY KEY,
     user_id INT,
     total_price DECIMAL(10, 2),
     payment_method VARCHAR(50),
     status VARCHAR(20),
     created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
     FOREIGN KEY (user_id) REFERENCES users(user_id)
    );
    
  6. 订单商品表(order_products)

    • 字段
      • order_product_id:INT,自增主键,订单商品记录唯一标识。
      • order_id:INT,外键关联 orders 表的 order_id,所属订单。
      • product_id:INT,外键关联 products 表的 product_id,订单中的商品。
      • quantity:INT,商品数量。
      • price:DECIMAL(10, 2),商品价格(记录下单时的价格)。
    • 说明:记录订单中具体的商品信息。
    • 代码:
    CREATE TABLE order_products (
     order_product_id INT AUTO_INCREMENT PRIMARY KEY,
     order_id INT,
     product_id INT,
     quantity INT,
     price DECIMAL(10, 2),
     FOREIGN KEY (order_id) REFERENCES orders(order_id),
     FOREIGN KEY (product_id) REFERENCES products(product_id)
     );
    
  7. 农产品表(agricultural_products)

    • 字段
      • product_id:INT,自增主键,农产品唯一标识(可与商品表的 product_id 关联)。
      • product_name:VARCHAR(100),农产品名称。
      • description:TEXT,农产品描述。
      • image_path:VARCHAR(255),农产品图片路径。
      • is_reservable:BOOLEAN,是否可预定。
    • 说明:存储可预定的农产品信息。
    • 代码:
    CREATE TABLE agricultural_products (
     product_id INT AUTO_INCREMENT PRIMARY KEY,
     product_name VARCHAR(100) NOT NULL,
     description TEXT,
     image_path VARCHAR(255),
     is_reservable BOOLEAN
     );
    
  8. 农产品预定表(agricultural_reservations)

    • 字段
      • reservation_id:INT,自增主键,预定记录唯一标识。
      • product_id:INT,外键关联 agricultural_products 表的 product_id,预定的农产品。
      • user_id:INT,外键关联 users 表的 user_id,预定用户。
      • quantity:INT,预定数量。
      • delivery_time:DATETIME,配送时间。
      • status:VARCHAR(20),预定状态(如已预定、生产中、已配送等)。
    • 说明:记录农产品的预定信息。
    • 代码:
    CREATE TABLE agricultural_reservations (
     reservation_id INT AUTO_INCREMENT PRIMARY KEY,
     product_id INT,
     user_id INT,
     quantity INT,
     delivery_time DATETIME,
     status VARCHAR(20),
     FOREIGN KEY (product_id) REFERENCES agricultural_products(product_id),
     FOREIGN KEY (user_id) REFERENCES users(user_id)
     );
    
  9. 配送信息表(delivery_info)

    • 字段
      • delivery_id:INT,自增主键,配送信息唯一标识。
      • user_id:INT,外键关联 users 表的 user_id,配送信息所属用户。
      • address:VARCHAR(255),配送地址。
      • delivery_range:VARCHAR(100),配送范围。
      • delivery_fee:DECIMAL(10, 2),配送费用。
      • delivery_time:DATETIME,选择的配送时间。
    • 说明:存储用户的配送信息。
    • 代码:
    CREATE TABLE delivery_info (
     delivery_id INT AUTO_INCREMENT PRIMARY KEY,
     user_id INT,
     address VARCHAR(255),
     delivery_range VARCHAR(100),
     delivery_fee DECIMAL(10, 2),
     delivery_time DATETIME,
     FOREIGN KEY (user_id) REFERENCES users(user_id)
     );
    
  10. 棋牌室与台球桌表(recreation_rooms)

  • 字段
    • room_id:INT,自增主键,房间唯一标识。
    • room_type:VARCHAR(50),房间类型(棋牌室或台球桌)。
    • is_available:BOOLEAN,是否可用。
    • price:DECIMAL(10, 2),价格。
  • 说明:存储棋牌室和台球桌的信息。
  • 代码:
CREATE TABLE recreation_rooms (
 room_id INT AUTO_INCREMENT PRIMARY KEY,
 room_type VARCHAR(50),
 is_available BOOLEAN,
 price DECIMAL(10, 2)
);
  1. 预定时间段表(reservation_slots)
  • 字段
    • slot_id:INT,自增主键,时间段唯一标识。
    • room_id:INT,外键关联 recreation_rooms 表的 room_id,所属房间。
    • start_time:DATETIME,开始时间。
    • end_time:DATETIME,结束时间。
  • 说明:存储棋牌室和台球桌的可用时间段。
  • 代码:
CREATE TABLE reservation_slots (
 slot_id INT AUTO_INCREMENT PRIMARY KEY,
 room_id INT,
 start_time DATETIME,
 end_time DATETIME,
 FOREIGN KEY (room_id) REFERENCES recreation_rooms(room_id)
);
  1. 房间预定表(room_reservations)
  • 字段
    • reservation_id:INT,自增主键,预定记录唯一标识。
    • user_id:INT,外键关联 users 表的 user_id,预定用户。
    • room_id:INT,外键关联 recreation_rooms 表的 room_id,预定的房间。
    • slot_id:INT,外键关联 reservation_slots 表的 slot_id,预定时间段。
    • payment_status:VARCHAR(20),支付状态(如已支付定金、已支付全款等)。
  • 说明:记录棋牌室和台球桌的预定信息。
  • 代码:
CREATE TABLE room_reservations (
 reservation_id INT AUTO_INCREMENT PRIMARY KEY,
 user_id INT,
 room_id INT,
 slot_id INT,
 payment_status VARCHAR(20),
 FOREIGN KEY (user_id) REFERENCES users(user_id),
 FOREIGN KEY (room_id) REFERENCES recreation_rooms(room_id),
 FOREIGN KEY (slot_id) REFERENCES reservation_slots(slot_id)
);
  1. 收藏夹表(favorites)
  • 字段
    • favorite_id:INT,自增主键,收藏记录唯一标识。
    • user_id:INT,外键关联 users 表的 user_id,收藏用户。
    • product_id:INT,外键关联 products 表的 product_id,收藏的商品。
  • 说明:存储用户的收藏商品信息。
  • 代码:
CREATE TABLE favorites (
 favorite_id INT AUTO_INCREMENT PRIMARY KEY,
 user_id INT,
 product_id INT,
 FOREIGN KEY (user_id) REFERENCES users(user_id),
 FOREIGN KEY (product_id) REFERENCES products(product_id)
);
  1. 优惠券表(coupons)
  • 字段
    • coupon_id:INT,自增主键,优惠券唯一标识。
    • coupon_code:VARCHAR(50),优惠券代码。
    • discount_amount:DECIMAL(10, 2),折扣金额。
    • expiry_date:DATETIME,过期时间。
  • 说明:存储优惠券信息。
  • 代码:
CREATE TABLE coupons (
 coupon_id INT AUTO_INCREMENT PRIMARY KEY,
 coupon_code VARCHAR(50),
 discount_amount DECIMAL(10, 2),
 expiry_date DATETIME
);
  1. 用户优惠券表(user_coupons)
  • 字段
    • user_coupon_id:INT,自增主键,用户优惠券记录唯一标识。
    • user_id:INT,外键关联 users 表的 user_id,拥有优惠券的用户。
    • coupon_id:INT,外键关联 coupons 表的 coupon_id,优惠券。
    • used_status:BOOLEAN,是否已使用。
  • 说明:记录用户拥有的优惠券信息。
  • 代码:
CREATE TABLE user_coupons (
 user_coupon_id INT AUTO_INCREMENT PRIMARY KEY,
 user_id INT,
 coupon_id INT,
 used_status BOOLEAN,
 FOREIGN KEY (user_id) REFERENCES users(user_id),
 FOREIGN KEY (coupon_id) REFERENCES coupons(coupon_id)
);
  1. 消息通知表(notifications)
  • 字段
    • notification_id:INT,自增主键,通知唯一标识。
    • user_id:INT,外键关联 users 表的 user_id,通知接收用户。
    • message:TEXT,通知内容。
    • notification_type:VARCHAR(50),通知类型(如订单状态通知、促销活动通知等)。
    • is_read:BOOLEAN,是否已读。
  • 说明:存储发送给用户的消息通知。
  • 代码:
CREATE TABLE notifications (
 notification_id INT AUTO_INCREMENT PRIMARY KEY,
 user_id INT,
 message TEXT,
 notification_type VARCHAR(50),
 is_read BOOLEAN,
 FOREIGN KEY (user_id) REFERENCES users(user_id)
);

二、数据表之间的关系
点击查看数据表的连接方式及解释

  1. 用户表与其他表的关系

    • 用户表(users)与购物车表(carts):一对多关系,一个用户可以有多个购物车记录。
    • 用户表(users)与订单表(orders):一对多关系,一个用户可以有多个订单。
    • 用户表(users)与农产品预定表(agricultural_reservations):一对多关系,一个用户可以有多个农产品预定记录。
    • 用户表(users)与房间预定表(room_reservations):一对多关系,一个用户可以有多个棋牌室或台球桌预定记录。
    • 用户表(users)与收藏夹表(favorites):一对多关系,一个用户可以有多个收藏商品记录。
    • 用户表(users)与用户优惠券表(user_coupons):一对多关系,一个用户可以有多个优惠券记录。
    • 用户表(users)与消息通知表(notifications):一对多关系,一个用户可以有多个消息通知。
  2. 商品表与其他表的关系

    • 商品表(products)与商品分类表(product_categories):多对一关系,一个商品属于一个分类。
    • 商品表(products)与购物车表(carts):一对多关系,一个商品可以在多个购物车记录中出现。
    • 商品表(products)与订单商品表(order_products):一对多关系,一个商品可以在多个订单中出现。
  3. 农产品表与其他表的关系

    • 农产品表(agricultural_products)与农产品预定表(agricultural_reservations):一对多关系,一个农产品可以有多个预定记录。
  4. 棋牌室与台球桌表与其他表的关系

    • 棋牌室与台球桌表(recreation_rooms)与预定时间段表(reservation_slots):一对多关系,一个房间可以有多个可用时间段。
    • 棋牌室与台球桌表(recreation_rooms)与房间预定表(room_reservations):一对多关系,一个房间可以有多个预定记录。
  5. 优惠券表与其他表的关系

    • 优惠券表(coupons)与用户优惠券表(user_coupons):一对多关系,一个优惠券可以被多个用户拥有。
posted @   Luck16th  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示