本篇文章是字节跳动青训营tiktok_e-commence项目,## 订单,结算,购物车,数据库模块设计计。
注意
本篇文章会注重逻辑,就不重复以前的注意事项了前几篇文章有写。
循序渐进数据库设计图
数据库字段讲解
-
products
- id: 产品ID(bigint UNSIGNED)
- name: 产品名称(varchar(255))
- description: 产品描述(text)
- picture: 产品图片URL(varchar(255))
- price: 产品价格(bigint(0))
- created_at: 创建时间(datetime(0))
- updated_at: 更新时间(datetime(0))
- extra_field1: 额外字段1(varchar(255))
- extra_field2: 额外字段2(text)
- extra_field3: 额外字段3(int(0))
- extra_field4: 额外字段4(tinyint(1))
- extra_field5: 额外字段5(timestamp(0))
-
cart_items
- id: 购物车项ID(bigint UNSIGNED)
- user_id: 用户ID(varchar(64))
- product_id: 产品ID(bigint(0))
- quantity: 数量(bigint(0))
- created_at: 创建时间(datetime(0))
- one: 额外字段1(varchar(25))
- two: 额外字段2(varchar(25))
- three: 额外字段3(varchar(25))
- four: 额外字段4(varchar(25))
-
order_items
- order_id: 订单ID(varchar(36))
- product_id: 产品ID(int(0))
- quantity: 数量(int(0))
- cost: 成本(tinyint(0))
- one: 额外字段1(varchar(255))
-
user
- id: 用户ID(varchar(64))
- username: 用户名(varchar(45))
- password: 密码(varchar(96))
- salt: 盐值(varchar(45))
- wx_unionid: 微信unionid(varchar(128))
- nickname: 昵称(varchar(255))
- name: 姓名(varchar(45))
- userpic: 用户头像(varchar(255))
- company_id: 公司ID(varchar(32))
- utype: 用户类型(varchar(32))
- birthday: 生日(datetime(0))
- sex: 性别(char(1))
- email: 邮箱(varchar(45))
- cellphone: 手机号(varchar(45))
- qq: QQ号码(varchar(32))
- status: 状态(varchar(32))
- create_time: 创建时间(datetime(0))
- update_time: 更新时间(datetime(0))
-
addresses
- id: 地址ID(int(0))
- street_address: 街道地址(varchar(255))
- city: 城市(varchar(100))
- state: 州/省(varchar(100))
- country: 国家(varchar(100))
- zip_code: 邮政编码(int(0))
- one: 额外字段1(varchar(255))
- two: 额外字段2(varchar(255))
-
orders
- id: 订单ID(varchar(36))
- user_id: 用户ID(int(0))
- address_id: 地址ID(int(0))
- email: 邮箱(varchar(255))
- user_currency: 用户货币(varchar(3))
- created_at: 创建时间(datetime(0))
- paid_type: 支付方式(varchar(50))
- total_price: 总金额(varchar(255))
- two: 额外字段2(varchar(255))
-
transactions
- id: 交易ID(bigint(0))
- order_id: 订单ID(varchar(255))
- user_id: 用户ID(bigint(0))
- credit_card_number: 信用卡号(bigint(0))
- credit_card_cvv: CVV码(varchar(255))
- credit_card_expiration_year: 信用卡有效期年份(varchar(255))
- amount: 金额(varchar(25))
- status: 状态(varchar(255))
- created_at: 创建时间(datetime(0))
- updated_at: 更新时间(datetime(0))
核心逻辑讲解
-
订单表和订单条目表相互关联,订单表和订单条目表是 多对多关系,订单表和商品是一对多关系,所以订单条目表没有id字段。
关键点:产品数量字段和订单条目的数量是各论各的。下订单时候,订单条目的数量字段-产品数量,当产品数量为1的时候,有两个人同时拿到1库存数量的时候,有个临界的问题。这个时候从安全考虑,可以给数据库加锁 -
订单表和地址表是多对多关系,多个订单可以有多个地址。
-
订单交易表和订单表是多对多关系。
注意点: 订单交易表有个状态字段,状态字段,可以考虑弄一个数据字典表.