您的位置 首页 php

开发实践-多用户商城的设计(一) 数据库核心结构

由于”某些“需要,决定重新做一个线上商城。下面是一些相关的实践。

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字节,这个设置得过大浪费,过小不够用,在没有更好的办法之前,只能如此了。

本文仅列出了商品相关的几个表的结构,是我最新的灵感。不代表就是最好的,或者还可以有很大的改善空间。
如果有不妥之处请批评指正。

文章来源:智云一二三科技

文章标题:开发实践-多用户商城的设计(一) 数据库核心结构

文章地址:https://www.zhihuclub.com/149098.shtml

关于作者: 智云科技

热门文章

网站地图