电子商务的交易记录,数据库怎么设计

电子商务的交易记录,数据库怎么设计,第1张

首先来说对于这种场景有两种设计方法,这两种方法都能够满足扩展性要求

1. 把原有的横表转化为纵表存储属性,即

产品表:(product_id, product_name, product_class)

产品属性表:(product_id, property_id , property_name , property_value)

2. 保持原有横表设计思路,但是d性字段含义单独元数据表存储

产品表:(product_id, product_name, product_class, prop1, prop2, .... propn)

产品属性含义元数据表

(product_class , prop1_name ,prop2_name, ..... propn_name)

对于两种设计方法,个人理解为

a. 对于首页打开就必须要能够快速查询出来的属性,而且这些属性本身各类产品差异不大。而对于差异大的属性基本都是针对特定一个产品查询。可以采用方案1来做。

b. 首页显示产品列表时候就存在要显示出不同产品属性情况,采用方案2来做。当我们处理的是一个product list的时候,由于存在数据表本身的关联场景,用方案1会比麻烦,也影响性能。

CREATE TABLE `mmall_user` (

  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户表id',

  `username` varchar(50) NOT NULL COMMENT '用户名',

  `password` varchar(50) NOT NULL COMMENT '用户密码,MD5加密',

  `email` varchar(50) DEFAULT NULL,

  `phone` varchar(20) DEFAULT NULL,

  `question` varchar(100) DEFAULT NULL COMMENT '找回密码问题',

  `answer` varchar(100) DEFAULT NULL COMMENT '找回密码答案',

  `role` int(4) NOT NULL COMMENT '角色0-管理员,1-普通用户',

  `create_time` datetime NOT NULL COMMENT '创建时间',

  `update_time` datetime NOT NULL COMMENT '最后一次更新时间',

  PRIMARY KEY (`id`),

  UNIQUE KEY `user_name_unique` (`username`) USING BTREE

) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8

CREATE TABLE `mmall_product` (

  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '商品id',

  `category_id` int(11) NOT NULL COMMENT '分类id,对应mmall_category表的主键',

  `name` varchar(100) NOT NULL COMMENT '商品名称',

  `subtitle` varchar(200) DEFAULT NULL COMMENT '商品副标题',

  `main_image` varchar(500) DEFAULT NULL COMMENT '产品主图,url相对地址',

  `sub_images` text COMMENT '图片地址,json格式,扩展用',

  `detail` text COMMENT '商品详情',

  `price` decimal(20,2) NOT NULL COMMENT '价格,单位-元保留两位小数',

  `stock` int(11) NOT NULL COMMENT '库存数量',

  `status` int(6) DEFAULT '1' COMMENT '商品状态.1-在售 2-下架 3-删除',

  `create_time` datetime DEFAULT NULL COMMENT '创建时间',

  `update_time` datetime DEFAULT NULL COMMENT '更新时间',

  PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=30 DEFAULT CHARSET=utf8

CREATE TABLE `mmall_category` (

  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '类别Id',

  `parent_id` int(11) DEFAULT NULL COMMENT '父类别id当id=0时说明是根节点,一级类别',

  `name` varchar(50) DEFAULT NULL COMMENT '类别名称',

  `status` tinyint(1) DEFAULT '1' COMMENT '类别状态1-正常,2-已废弃',

  `sort_order` int(4) DEFAULT NULL COMMENT '排序编号,同类展示顺序,数值相等则自然排序',

  `create_time` datetime DEFAULT NULL COMMENT '创建时间',

  `update_time` datetime DEFAULT NULL COMMENT '更新时间',

  PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=100031 DEFAULT CHARSET=utf8

CREATE TABLE `mmall_order` (

  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '订单id',

  `order_no` bigint(20) DEFAULT NULL COMMENT '订单号',

  `user_id` int(11) DEFAULT NULL COMMENT '用户id',

  `shipping_id` int(11) DEFAULT NULL,

  `payment` decimal(20,2) DEFAULT NULL COMMENT '实际付款金额,单位是元,保留两位小数',

  `payment_type` int(4) DEFAULT NULL COMMENT '支付类型,1-在线支付',

  `postage` int(10) DEFAULT NULL COMMENT '运费,单位是元',

  `status` int(10) DEFAULT NULL COMMENT '订单状态:0-已取消-10-未付款,20-已付款,40-已发货,50-交易成功,60-交易关闭',

  `payment_time` datetime DEFAULT NULL COMMENT '支付时间',

  `send_time` datetime DEFAULT NULL COMMENT '发货时间',

  `end_time` datetime DEFAULT NULL COMMENT '交易完成时间',

  `close_time` datetime DEFAULT NULL COMMENT '交易关闭时间',

  `create_time` datetime DEFAULT NULL COMMENT '创建时间',

  `update_time` datetime DEFAULT NULL COMMENT '更新时间',

  PRIMARY KEY (`id`),

  UNIQUE KEY `order_no_index` (`order_no`) USING BTREE

) ENGINE=InnoDB AUTO_INCREMENT=118 DEFAULT CHARSET=utf8

CREATE TABLE `mmall_order_item` (

  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '订单子表id',

  `user_id` int(11) DEFAULT NULL,

  `order_no` bigint(20) DEFAULT NULL,

  `product_id` int(11) DEFAULT NULL COMMENT '商品id',

  `product_name` varchar(100) DEFAULT NULL COMMENT '商品名称',

  `product_image` varchar(500) DEFAULT NULL COMMENT '商品图片地址',

  `current_unit_price` decimal(20,2) DEFAULT NULL COMMENT '生成订单时的商品单价,单位是元,保留两位小数',

  `quantity` int(10) DEFAULT NULL COMMENT '商品数量',

  `total_price` decimal(20,2) DEFAULT NULL COMMENT '商品总价,单位是元,保留两位小数',

  `create_time` datetime DEFAULT NULL,

  `update_time` datetime DEFAULT NULL,

  PRIMARY KEY (`id`),

  KEY `order_no_index` (`order_no`) USING BTREE,

  KEY `order_no_user_id_index` (`user_id`,`order_no`) USING BTREE

) ENGINE=InnoDB AUTO_INCREMENT=135 DEFAULT CHARSET=utf8

CREATE TABLE `mmall_cart` (

  `id` int(11) NOT NULL AUTO_INCREMENT,

  `user_id` int(11) NOT NULL,

  `product_id` int(11) DEFAULT NULL COMMENT '商品id',

  `quantity` int(11) DEFAULT NULL COMMENT '数量',

  `checked` int(11) DEFAULT NULL COMMENT '是否选择,1=已勾选,0=未勾选',

  `create_time` datetime DEFAULT NULL COMMENT '创建时间',

  `update_time` datetime DEFAULT NULL COMMENT '更新时间',

  PRIMARY KEY (`id`),

  KEY `user_id_index` (`user_id`) USING BTREE

) ENGINE=InnoDB AUTO_INCREMENT=127 DEFAULT CHARSET=utf8

CREATE TABLE `mmall_pay_info` (

  `id` int(11) NOT NULL AUTO_INCREMENT,

  `user_id` int(11) DEFAULT NULL COMMENT '用户id',

  `order_no` bigint(20) DEFAULT NULL COMMENT '订单号',

  `pay_platform` int(10) DEFAULT NULL COMMENT '支付平台:1-支付宝,2-微信',

  `platform_number` varchar(200) DEFAULT NULL COMMENT '支付宝支付流水号',

  `platform_status` varchar(20) DEFAULT NULL COMMENT '支付宝支付状态',

  `create_time` datetime DEFAULT NULL COMMENT '创建时间',

  `update_time` datetime DEFAULT NULL COMMENT '更新时间',

  PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=61 DEFAULT CHARSET=utf8

CREATE TABLE `mmall_shipping` (

  `id` int(11) NOT NULL AUTO_INCREMENT,

  `user_id` int(11) DEFAULT NULL COMMENT '用户id',

  `receiver_name` varchar(20) DEFAULT NULL COMMENT '收货姓名',

  `receiver_phone` varchar(20) DEFAULT NULL COMMENT '收货固定电话',

  `receiver_mobile` varchar(20) DEFAULT NULL COMMENT '收货移动电话',

  `receiver_province` varchar(20) DEFAULT NULL COMMENT '省份',

  `receiver_city` varchar(20) DEFAULT NULL COMMENT '城市',

  `receiver_district` varchar(20) DEFAULT NULL COMMENT '区/县',

  `receiver_address` varchar(200) DEFAULT NULL COMMENT '详细地址',

  `receiver_zip` varchar(6) DEFAULT NULL COMMENT '邮编',

  `create_time` datetime DEFAULT NULL,

  `update_time` datetime DEFAULT NULL,

  PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=30 DEFAULT CHARSET=utf8

GitHub 地址:https://github.com/Andy-leoo/NewBieJavaPro.git

这是一个非常好的问题!不过已经把解决方案给出来了。

我的理解是"动态表结构"。

Product(p_id,name)

ExtendField(ef_id,name,p_id)

ExtendValue(ev_id,value,ef_id,p_id)

当添加新属性时,只是相当于在数据库添加一条记录,没有该变表结构。

这里是存的是书,现在要存储英译书(原作者,译者,原出版社,国内出版社)

这就中文书籍不需要原作者、原出版社,如果为了存储英译书,只需向后2个表添加记录即可,否则就要向product表添加2个属性,而该设计不必改变原表的表结构(table schema)。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9592592.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存