设计库存表
原创大约 5 分钟
对于初创企业或者中小企业来说,如果没有分店,其实可以直接把库存作为字段定义在商品表t_spu
中。
但这样做将来扩展起来会比较麻烦,所以建议一开始就将库存独立存储。这样将来扩展分店时就可以无缝升级。
门店
和仓库
之间的关系应该是这样的。

这里有一个比较特殊的地方在于:门店
和仓库
之间是不能创建关联表
的。
实际上,门店
、商品
和仓库
三者之间的是这样的关系。

因为涉及到物流发货的问题,有时会对客户的订单进行拆分,选择就近的仓库发货,以节约物流费用。
可以通过高德地图提供的服务,计算离客户位置最近的仓库。
客户位置和仓库之间距离的计算,可以通过对收货地址进行反向解析,将之转换为成经纬度,然后再和仓库表中的经纬度进行对比,得到离客户最近的仓库。
-- 行政区划表
DROP TABLE IF EXISTS `t_area`;
CREATE TABLE `t_area` (
`id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '区域编码',
`code` VARCHAR(32) NOT NULL COMMENT '区域代号,例如,420000',
`areaname` VARCHAR(256) NOT NULL COMMENT '区域名称',
`parentid` INT(11) NOT NULL DEFAULT '0' COMMENT '父级编码',
`parentids` VARCHAR(128) NOT NULL DEFAULT '' COMMENT '所有父级编码',
`sorts` INT(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '排序号(升序)',
`type` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0' COMMENT '区域类型 0:直辖市;1:省份;2:自治区;3:特别行政区;4:其他',
`status` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0' COMMENT '状态 0:启用;1:停用',
`remark` VARCHAR(256) DEFAULT '' COMMENT '备注信息',
`isleaf` 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,
UNIQUE INDEX `unq_code`(`code`) USING BTREE,
UNIQUE INDEX `unq_code`(`areaname`) USING BTREE
) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT = '商品表';
-- 门店表
DROP TABLE IF EXISTS `t_shop`;
CREATE TABLE `t_shop` (
`id` BIGINT(20) UNSIGNED NOT NULL COMMENT '门店编码',
`areaid` INT(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '区域编码',
`address` VARCHAR(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '地址',
`mobile` VARCHAR(16) 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,
INDEX `idx_areaid`(`areaid`) USING BTREE
) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT = '门店表';
-- 门店历史表
DROP TABLE IF EXISTS `t_shop_history`;
CREATE TABLE `t_shop_history` (
`id` BIGINT(20) UNSIGNED NOT NULL COMMENT '流水主键',
`shopid` BIGINT(20) UNSIGNED NOT NULL COMMENT '门店编码',
`areaid` INT(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '区域编码',
`address` VARCHAR(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '地址',
`mobile` VARCHAR(16) NOT NULL DEFAULT '' COMMENT '电话',
`createtime` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_shopid`(`shopid`) USING BTREE,
INDEX `idx_areaid`(`areaid`) USING BTREE
) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT = '门店历史表';
-- 门店商品表
DROP TABLE IF EXISTS `t_shop_sku`;
CREATE TABLE `t_shop_sku` (
`shopid` BIGINT(20) UNSIGNED NOT NULL COMMENT '门店编码',
`skuid` BIGINT(20) UNSIGNED NOT NULL COMMENT '商品编码',
`quantity` INT(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '库存数量',
`unit` VARCHAR(20) 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 (`shopid`, `skuid`) USING BTREE
) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT = '门店商品表';
-- 仓库表
DROP TABLE IF EXISTS `t_warehouse`;
CREATE TABLE `t_warehouse` (
`id` BIGINT(20) UNSIGNED NOT NULL COMMENT '仓库编码',
`areaid` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '区域编码',
`address` VARCHAR(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '地址',
`mobile` VARCHAR(20) NOT NULL DEFAULT '' COMMENT '电话',
`lng` DECIMAL(15, 10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '纬度',
`lat` DECIMAL(15, 10) UNSIGNED NOT NULL DEFAULT '0' 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,
INDEX `idx_areaid`(`areaid`) USING BTREE
) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT = '仓库表';
-- 仓库历史表
DROP TABLE IF EXISTS `t_warehouse_history`;
CREATE TABLE `t_warehouse_history` (
`id` BIGINT(20) UNSIGNED NOT NULL COMMENT '流水主键',
`whid` BIGINT(20) UNSIGNED NOT NULL COMMENT '仓库编码',
`areaid` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '区域编码',
`address` VARCHAR(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '地址',
`mobile` VARCHAR(20) NOT NULL DEFAULT '' COMMENT '电话',
`lng` DECIMAL(15, 10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '纬度',
`lat` DECIMAL(15, 10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '经度',
`createtime` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_whid`(`whid`) USING BTREE,
INDEX `idx_areaid`(`areaid`) USING BTREE
) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT = '仓库历史表';
-- 仓库商品表
DROP TABLE IF EXISTS `t_warehouse_sku`;
CREATE TABLE `t_warehouse_sku` (
`whid` BIGINT(20) UNSIGNED NOT NULL COMMENT '仓库编码',
`skuid` BIGINT(20) UNSIGNED NOT NULL COMMENT '商品编码',
`quantity` INT(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '库存数量',
`unit` VARCHAR(20) 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 (`whid`, `skuid`) USING BTREE
) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT = '仓库商品表';
感谢支持
更多内容,请移步《超级个体》。