1.下面表中最比较重要和通用的是create_time和update_time这两个字段。这两个要设置为date_time类型,具体到某个时间,而不是date类型。 这两个字段可以避免我们在写代码的时候忘记打印时间戳,有时候通过这两个字段可以减少我们查询业务代码的时间。
2.单一索引和组合索引用于提高我们查询表的效率。
1.user表
id-int
username-varchar
password-varchar
email-varchar
phone-varchar
question-varchar
answer-varchar
role-int
create_time-datetime
update_time-datetime
2.建立唯一索引 UNIQUE KEY 'user_name_unique' (`username`) USING BTREE.
因为我们在进行用户名校验的时候使用的是同步方法,但是如果使用分布式系统的时候这种方案不可取了。我们通过数据库的唯一索引,把username设置为唯一索引就把username的唯一确定性交给数据库处理。所以我们就不需要加锁和同步方法判断用户名是否存在。
password 保存在数据库中的是经过MD5盐值进行加密后的密码的,所以我们只通过password这个字段是看不到用户的密码的。
role 0为管理员 ,1为普通用户。
分类表:
id-int
parent_id-int
name-varchar
status-tinyint
sort_order-int
create_time-datetime
update_time-datetime
parent_id 实现一个递归,当parent_id=0的时候说明这是一个根节点,一级类别。同理别的商品类别parent_id可能为1,2.. 。类别的树状图可能是无限级别扩展的,当parent_id=0是结束。
status 1正常 2已废弃
sort_order 排序序号,
产品表
id-int
category_id-int
name-varchar 商品名称
subtitle-varchar 商品副标题
main_image-varchar(500) 主图,保存url的相对地址
sub_image-text 图片地址,json格式,扩展用。
detail-text 商品详情,富文本 可能需要加粗,图片等。
price-decimal(20,2) 20为包括小数位总体位数,也就是说这里表示18为整数,2位小数。价格 (需要注意计算时候的精度丢失问题)
stock-int 库存
status-int 1在售 2下架 3删除
create_time-datetime
update_time-datetime
购物车表
id-int
user_id -int
product_id-int
quantity-int
checked-int 1勾选,0未勾选
create_time
update_time
因为这个表会经常用到user表的非主键user_id进行查询(主键是id).所以我们在创建购物车表cart的时候为user_id加上了索引 (KEY `user_id_index` (user_id) USING BTREE) ,从而提高表达查询效率。
支付信息表(pay_info)
id-int
user_id-int
order_no-bigint 订单号
pay_platform-int 支付平台 ,1-支付宝,2-微信
platform_number-varchar 支付流水号
platform-status-varchar 支付状态
create_time-datetime
update_time-datime
订单表
id-int
order-no-bigint
user_id-int
shipping_id-int 对应订单的地址
payment-decimal 实际付款金额,不能和产品中的价格关联,如果产品中的价格在卖了之后改动,那么实际付款金额不变。
payment_type-int 支付类型 1.在线支付 2.货到付款
postage-int 运费(可以先设置为包邮,以为对接物流的时候进行扩展)
status-int 订单状态,0-取消,10-为付款,20-已付款,40-已发货,50-交易成功,60-交易关闭。 (这样设置的好处是,我们如果想查询一个订单是否发货只要查询订单状态是否大于20。)
payment_time-datetime 支付时间,把支付宝确认支付之后的回调记录的时间记录到这里。
send_time-datetime 发货时间
end_time-datime 交易完成时间
close_time-datetime 交易关闭时间
create_time-datetime
update_time-datetime
订单明细表order_item
id-int
user_id-int (虽然这个id通过关联order表也能查询到,但是这样子进行关联查询会造成效率变低,所以有时候我们也会在个别表中加入这种字段 )
order_no-bigint
product_id-int
product_name-varchar
product_image-varchar
current_unit_price-decimal
quantity-int
total_price-decimal 直接进行计算并且存储,不用以后每次都进行计算。
create_time-datetime
update_time-datetime
这里加了组合索引(KEY `order_no_user_id_index `(`user_id`,`order_no`) USING BTREE)
收货地址表
id-int
user_id-int
receiver-name-varchar
receiver-phone-varchar
receiver-mobile-varchar
receiver-province-varchar
receiver_city-varchar
receiver_district-varchar
receiver_address-varchar
receiver_zip-varchar
create_time-datetime
update_time-datetime