由于”某些“需要,决定重新做一个线上商城。下面是一些相关的实践。
1.产品命名,没有什么好的名字。既然是商城可用“shop”吧,只要不和其他的产品重名就可以了;暂定名称为”SuperShop”。下面全部使用”SuperShop”来称呼这个产品。
2.SuperShop开发语言的选择,后端的开发语言可以使用Java、C#、 PHP三种语言。
3.SuperShop的数据库类型,第一种数据库,选择MySQL。
4.大致功能组成,SuperShop的功能模块大致可以分为:后台管理(PC WEB端),线上商城(PC WEB 端),线上商城移动端,线上商城外部接口,APP端(如有需求再开发)。
数据库核心结构:
命名规则,采用驼峰命名法,所有ID主键都采用雪花算法生成ID。表的前缀是”s_”
下面是建表查询
商品表:
CREATE TABLE `s_Goods` (
`ID` bigint(20) NOT NULL,
`Name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '商品名称',
`Number` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '商品编码',
`ShopID` bigint(20) NOT NULL DEFAULT 0 COMMENT '商店ID',
`GoodsClassesID` int(11) NOT NULL DEFAULT 0 COMMENT '商品类别ID ',
`GoodsClassesAllID` varchar(2000) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '基因序列',
`Cover` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '封面图片',
`Description` longtext CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '商品介绍 (支持HTML)',
`UnitID` bigint(20) NOT NULL DEFAULT 0 COMMENT '计量单位ID',
`Price` decimal(18, 2) NOT NULL DEFAULT 0.00 COMMENT '价格',
`Stock` decimal(18, 2) NOT NULL DEFAULT 0.00 COMMENT '库存',
`Status` int(11) NOT NULL DEFAULT 0 COMMENT '状态标识',
`CreateTime` int(11) NOT NULL DEFAULT 0 COMMENT '创建时间',
PRIMARY KEY (`ID`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '商品表' ROW_FORMAT = Dynamic;
简单说明一下,商品表比较简洁,只包含必要的基本属性,因为后面的设计,已经有扩展字段,不用担心不能适应各种商品的需求。
商品类别表:
CREATE TABLE `s_GoodsClasses` (
`ID` bigint(20) NOT NULL,
`ParentID` bigint(20) NOT NULL DEFAULT 0 COMMENT '父ID',
`Name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '名称',
`Number` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '编码',
`AllID` varchar(2000) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '基因序列',
`Sort` int(11) NOT NULL DEFAULT 255 COMMENT '同级排序',
`Orders` int(11) NOT NULL DEFAULT 0 COMMENT '全局排序',
`Depth` int(11) NOT NULL DEFAULT 1 COMMENT '深度',
`Status` int(11) NOT NULL DEFAULT 0 COMMENT '状态标识',
`CreateTime` int(11) NOT NULL DEFAULT 0 COMMENT '创建时间',
PRIMARY KEY (`ID`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '商品类别' ROW_FORMAT = Dynamic;
商品类别采用了无限分级的树状结构,支持排序,关系继承。
计量单位,采用了多级计量单位的结构 支持大小计量单位:
CREATE TABLE `s_Unit` (
`ID` bigint(20) NOT NULL,
`ParentID` bigint(20) NOT NULL DEFAULT 0 COMMENT '父ID',
`Name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '名称',
`Number` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '编码',
`AllID` varchar(2000) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '基因序列',
`Equation` decimal(18, 0) NOT NULL DEFAULT 1 COMMENT '单位换算率 默认1 ',
`Sort` int(11) NOT NULL DEFAULT 255 COMMENT '同级排序',
`Orders` int(11) NOT NULL DEFAULT 0 COMMENT '全局排序',
`Depth` int(11) NOT NULL DEFAULT 1 COMMENT '深度',
`Memo` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '说明',
`Status` int(11) NOT NULL DEFAULT 0 COMMENT '状态标识',
`CreateTime` int(11) NOT NULL DEFAULT 0 COMMENT '创建时间',
PRIMARY KEY (`ID`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '计量单位' ROW_FORMAT = DYNAMIC;
扩展属性表,扩展属性,是根据每一个商品类别而定义的,扩展属性可以继承,同名的子类覆盖父类:
CREATE TABLE `s_GoodsAttributes` (
`ID` bigint(20) NOT NULL,
`Name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '名称',
`GoodsClassesID` int(11) NOT NULL DEFAULT 0 COMMENT '商品类别ID ',
`AttrKey` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '属性的唯一key ',
`InputType` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '表单类型',
`DefaultValue` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '默认值',
`Options` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '可选值,用逗号分隔',
PRIMARY KEY (`ID`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '商品扩展属性' ROW_FORMAT = Dynamic;
扩展属性值,这个表存储所有商品的扩展属性的值
CREATE TABLE `s_GoodsAttributesValues` (
`ID` bigint(20) NOT NULL,
`GoodsID` bigint(20) NOT NULL COMMENT '商品ID',
`AttrKey` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '属性的唯一key ',
`AttrName` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '属性名称 ',
`Value` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '属性值',
PRIMARY KEY (`ID`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '商品扩展属性值' ROW_FORMAT = Dynamic;
这里最大的问题是,属性的值,最大的支持255字节,这个设置得过大浪费,过小不够用,在没有更好的办法之前,只能如此了。
本文仅列出了商品相关的几个表的结构,是我最新的灵感。不代表就是最好的,或者还可以有很大的改善空间。
如果有不妥之处请批评指正。