一张订单中,包含多个商品记录
不可以用 json存储这些商品信息?因为

  • json字段适合存储数据,不适合检索数据,索引
  • 只做页面显示,不检索

正确的做法,创建2张表

  1. 订单表
  2. 订单明细表

订单表

image.png

  • code 订单号的流水号,订单号规则数字 + 字母
    • 例如字母 A结尾的代表 电子产品
    • W代表的的是酒水
    • F 代表的食品
    • 流水号包含订单的日期和时间区域等
    • 是否是加急订单
    • 阅读流水号就可以知道订单的大概
  • shop_id 哪个门店售卖的
  • amount
  • payment_type 支付类型
  • status 付款的状态
  • postage 快递费
  • voucher_id 一张订单只能使用一个优惠券
  1. CREATE TABLE `t_order`
  2. (
  3. `id` INT UNSIGNED PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
  4. `code` VARCHAR(200) NOT NULL COMMENT '订单流水号',
  5. `type` TINYINT UNSIGNED NOT NULL COMMENT '订单类型:1实体店,2网店',
  6. `shop_id` INT UNSIGNED COMMENT '门店ID',
  7. `customer_id` INT UNSIGNED COMMENT '会员ID',
  8. `amount` DECIMAL(10, 2) UNSIGNED NOT NULL COMMENT '总金额',
  9. `payment_type` TINYINT UNSIGNED NOT NULL COMMENT '支付方式:1借记卡,2信用卡,3微信,4支付宝,5现金',
  10. `status` TINYINT UNSIGNED NOT NULL COMMENT '订单状态:1未付款,2已付款,3已发货,4已签收',
  11. `postage` DECIMAL(10, 2) UNSIGNED COMMENT '邮费',
  12. `weight` INT UNSIGNED COMMENT '重量,默认 g',
  13. `voucher_id` INT UNSIGNED COMMENT '优惠券ID',
  14. `created_at` TIMESTAMP NOT NULL DEFAULT NOW() COMMENT '创建时间',
  15. INDEX idx_code (`code`),
  16. INDEX idx_customer_id (`customer_id`),
  17. INDEX idx_status (`status`),
  18. INDEX idx_created_at (`created_at`), # 根据时间查找订单
  19. INDEX idx_type (`type`),
  20. INDEX idx_shop_id (`shop_id`),
  21. UNIQUE unq_code (`code`)
  22. ) COMMENT = '订单表';

订单详情表

一个订单可以对应多个详情

image.png

  1. CREATE TABLE `t_order_detail`
  2. (
  3. `order_id` INT UNSIGNED NOT NULL COMMENT '订单ID',
  4. `sku_id` INT UNSIGNED NOT NULL COMMENT '商品ID',
  5. `price` DECIMAL(10, 2) UNSIGNED NOT NULL COMMENT '原价格,账面价格',
  6. `actual_price` DECIMAL(10, 2) UNSIGNED NOT NULL COMMENT '实际购买价格,付款金额',
  7. `number` INT UNSIGNED NOT NULL COMMENT '购买数量',
  8. PRIMARY KEY (`order_id`, `sku_id`) # 复合主键
  9. ) COMMENT = '订单详情表';