一张订单中,包含多个商品记录
不可以用 json存储这些商品信息?因为
- json字段适合存储数据,不适合检索数据,索引
- 只做页面显示,不检索
正确的做法,创建2张表
- 订单表
- 订单明细表
订单表

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

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