Appearance
一个用户可领取多个购物券,因此我们最少需要设计出两张表,让购物券与用户相关联;
购物券表设计
sql
CREATE TABLE `t_voucher` (
`id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键',
`deno` decimal(10, 2) UNSIGNED NOT NULL COMMENT '面值',
`condition` decimal(10, 2) UNSIGNED NOT NULL COMMENT '订单满多少钱可以使用',
`start_date` date NULL DEFAULT NULL COMMENT '起始日期',
`end_date` date NULL DEFAULT NULL COMMENT '截止日期',
`max_num` int(11) NULL DEFAULT NULL COMMENT '代金券发放最大数量',
`is_deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除',
PRIMARY KEY (`id`) USING BTREE
) COMMENT = '购物券表';
客户关联购物券表
sql
CREATE TABLE `t_voucher_customer` (
`id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键',
`voucher_id` int(10) UNSIGNED NOT NULL COMMENT '购物券ID',
`customer_id` int(10) UNSIGNED NOT NULL COMMENT '客户ID',
`is_deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除',
PRIMARY KEY (`id`) USING BTREE
) COMMENT = '客户关联购物券数据表';
订单表设计
TIP
一张订单中可以包含多个商品记录,我们可不可以用JSON存储这些商品信息?答案是否定的,因为JSON字段适合存储数据,不适合检索数据。我们可以创建两张表来解决这个问题,分别是订单表和订单明细表。
sql
CREATE TABLE `t_order` (
`id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键',
`code` varchar(150) NOT NULL COMMENT '流水号',
`type` tinyint(3) UNSIGNED NOT NULL COMMENT '订单类型:1实体销售,2网络销售',
`shop_id` int(10) UNSIGNED NULL DEFAULT NULL COMMENT '零售店ID',
`customer_id` int(10) UNSIGNED NULL DEFAULT NULL COMMENT '会员ID',
`amount` decimal(10, 2) UNSIGNED NOT NULL COMMENT '总金额',
`payment_type` tinyint(3) UNSIGNED NOT NULL COMMENT '支付方式:1借记卡,2信用卡,3微信,4支付宝,5现金',
`status` tinyint(3) UNSIGNED NOT NULL COMMENT '状态:1未付款,2已付款,3已发货,4已签收',
`postage` decimal(10, 2) UNSIGNED NULL DEFAULT NULL COMMENT '邮费',
`weight` int(10) UNSIGNED NULL DEFAULT NULL COMMENT '重量(克)',
`voucher_id` int(10) UNSIGNED NULL DEFAULT NULL COMMENT '购物券ID',
`create_time` timestamp(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`is_deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `unq_code`(`code`) USING BTREE,
INDEX `idx_code`(`code`) USING BTREE,
INDEX `idx_customer_id`(`customer_id`) USING BTREE,
INDEX `idx_status`(`status`) USING BTREE,
INDEX `idx_create_time`(`create_time`) USING BTREE,
INDEX `idx_type`(`type`) USING BTREE,
INDEX `idx_shop_id`(`shop_id`) USING BTREE
) COMMENT = '订单表';
订单详情表
sql
CREATE TABLE `t_order_detail` (
`order_id` int(10) UNSIGNED NOT NULL COMMENT '订单ID',
`sku_id` int(10) UNSIGNED NOT NULL COMMENT '商品ID',
`price` decimal(10, 2) UNSIGNED NOT NULL COMMENT '原价格',
`actual_price` decimal(10, 2) UNSIGNED NOT NULL COMMENT '实际购买价',
`num` int(10) UNSIGNED NOT NULL COMMENT '购买数量',
`is_deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除',
PRIMARY KEY (`order_id`, `sku_id`) USING BTREE
) COMMENT = '订单详情表';
WARNING
思考一下有了id为什么还要流水号?答案是流水号可以自定义规则,例如尾号为A代表加急发货,B代表正常发货,C代表延期发货等等,业务员可以通过流水号直观的了解到订单信息。