青训营X豆包MarsCode技术训练营伴学笔记|实践记录以及工具使用:订单,结算,购物车,数据库模块设计|豆包MarsCode AI刷题

80 阅读3分钟

本篇文章是字节跳动青训营tiktok_e-commence项目,## 订单,结算,购物车,数据库模块设计计。

注意

本篇文章会注重逻辑,就不重复以前的注意事项了前几篇文章有写。

循序渐进数据库设计图

image.png

数据库字段讲解

  1. 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))
  2. 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))
  3. order_items

    • order_id: 订单ID(varchar(36))
    • product_id: 产品ID(int(0))
    • quantity: 数量(int(0))
    • cost: 成本(tinyint(0))
    • one: 额外字段1(varchar(255))
  4. 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))
  5. 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))
  6. 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))
  7. 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))

核心逻辑讲解

  1. 订单表和订单条目表相互关联,订单表和订单条目表是 多对多关系,订单表和商品是一对多关系,所以订单条目表没有id字段。

    关键点:产品数量字段和订单条目的数量是各论各的。下订单时候,订单条目的数量字段-产品数量,当产品数量为1的时候,有两个人同时拿到1库存数量的时候,有个临界的问题。这个时候从安全考虑,可以给数据库加锁
    
  2. 订单表和地址表是多对多关系,多个订单可以有多个地址。

  3. 订单交易表和订单表是多对多关系。

    注意点:
    订单交易表有个状态字段,状态字段,可以考虑弄一个数据字典表.