设计品类和参数
原创大约 3 分钟
根据之前对SPU和SKU的理解,品类表(t_product_type)
和参数表(t_parameter)
的字段如下。
-- 品类表
DROP TABLE IF EXISTS `t_product_type`;
CREATE TABLE `t_product_type` (
`id` BIGINT(20) UNSIGNED NOT NULL COMMENT '品类编号',
`typename` VARCHAR(256) NOT NULL DEFAULT '' COMMENT '品类名称',
`isdeleted` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0' COMMENT '逻辑删除 0:正常;1:已删除',
`createtime` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updatetime` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `unq_typename`(`typename`) USING BTREE,
) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT = '品类表';
-- SKU参数表
DROP TABLE IF EXISTS `t_sku_parameter`;
CREATE TABLE `t_sku_parameter` (
`id` BIGINT(20) UNSIGNED NOT NULL COMMENT '参数编号',
`ptid` BIGINT(20) UNSIGNED NOT NULL DEFAULT '0' COMMENT '品类编号',
`paramname` VARCHAR(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '参数名称',
`segements` VARCHAR(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '参数值',
`unit` VARCHAR(256) NOT NULL DEFAULT '' COMMENT '单位',
`isnumer` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0' COMMENT '是否为数字参数 0:否;1:是',
`isgeneric` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0' COMMENT '是否为通用参数 0:否;1:是',
`issearch` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0' COMMENT '是否用于通用搜索 0:否;1:是',
`isdeleted` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0' COMMENT '逻辑删除 0:正常;1:已删除',
`createtime` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updatetime` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_ptid`(`ptid`) USING BTREE
) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT = 'SKU参数表';
-- SKU参数历史表
DROP TABLE IF EXISTS `t_sku_parameter_history`;
CREATE TABLE `t_sku_parameter_history` (
`id` BIGINT(20) UNSIGNED NOT NULL COMMENT '流水主键',
`spid` BIGINT(20) UNSIGNED NOT NULL COMMENT '参数编号',
`ptid` BIGINT(20) UNSIGNED NOT NULL DEFAULT '0' COMMENT '品类编号',
`paramname` VARCHAR(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '参数名称',
`segements` VARCHAR(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '参数值',
`unit` VARCHAR(256) NOT NULL DEFAULT '' COMMENT '单位',
`isnumer` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0' COMMENT '是否为数字参数 0:否;1:是',
`isgeneric` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0' COMMENT '是否为通用参数 0:否;1:是',
`issearch` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0' COMMENT '是否用于通用搜索 0:否;1:是',
`createtime` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_ptid`(`spid`) USING BTREE,
INDEX `idx_ptid`(`ptid`) USING BTREE
) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT = 'SKU参数表';
从上面表结构可以看到,t_sku_parameter
多了一个附带的_history(历史)
表,这是为了应对数据表信息被修改的情况。
所有可以被商家或用户操作的数据表都有附带的
_history
表,而由平台方操作的数据表则没有。_history
表唯一的不同就是多了一个流水主键
,专门用来和原表的主键做区分。由于
_history
表只做新增,没有修改和删除操作,所以也就没有isdeleted
和updatetime
这两个字段。所有关联表中存放的都是最新数据的
业务主键
,而不是历史表中的流水主键
。如果需要查询历史数据,可以通过关联历史表中相应的
业务主键
查询即可。
后续所有的表结构设计都遵循这种模式。
感谢支持
更多内容,请移步《超级个体》。