一张订单中,包含多个商品记录
不可以用 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 = '订单详情表';