青训营X豆包MarsCode技术训练营伴学笔记|实践记录以及工具使用:商品服务与购物车服务数据库模块设计|豆包MarsCode AI刷题

131 阅读5分钟

本篇文章是字节跳动青训营tiktok_e-commence项目,商品服务以及购物车服务,的数据库表设计。

一般的项目设计步骤:

1. 需求分析

  • 收集需求:与客户或业务方沟通,了解项目的目标、功能需求、性能要求、安全需求等。
  • 需求文档:编写详细的需求规格说明书(SRS),明确项目的目标、范围、功能、界面设计等。

2. 系统设计

2.1 架构设计
  • 选择架构:确定项目的总体架构,如MVC(Model-View-Controller)、MVVM(Model-View-ViewModel)等。
  • 技术选型:选择合适的技术栈,包括前端框架、后端框架(如Spring Boot、Spring MVC)、数据库(如MySQL、PostgreSQL、MongoDB)等
2.2 数据库设计
  • ER图:绘制实体关系图(ER图),定义数据库表结构、字段、主键、外键等。
  • 数据字典:编写数据字典,详细描述每个表的字段及其含义。

设计的流程我就不完全放在了,感兴趣的自己去搜搜,本篇文章是根据springboot+springcloud以微服务的设计模式,由于数据库设计是依据系统架构设计,go语言的技术栈设计会与本项目略有不同,但万变不离其宗,仍有借鉴价值。

心得:

  1. 设计的时候要从全局去考虑,需求分析-->系统设计-->数据库设计。把所有需求,依据技术栈,完完全全的设计出来。切忌要做到哪,在设计到哪。

    为什么:因为想到哪设计到哪,一旦有新的想法,就要回头去更改。
    最致命的是发现有数据库有逻辑问题,推倒重来,白干。
    本篇由于给出了具体需求,建议设计时长大概占比1/3。
    我是全部做完,回头发布这篇文章的,由于篇幅较长,不得已分开写的。
    

设计正文

image.png

products (产品表)

  • id: 产品的唯一标识符,无符号bigint类型。

  • name: 产品名称,varchar(255)类型。

  • description: 产品描述,text类型。

  • picture: 产品图片链接,varchar(255)类型。

  • price: 产品价格,bigint类型。

  • 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)类型。

       为什么:1.看起来有点乱,但主要逻辑是没问题的。一般来说留出三个冗余字段就好(企业中重新申请字段是一个麻烦事儿)
              2.这些字段,基本上是入库就是一成不变的,单独设计为一张产品表,把需要经常变更的表设计出去。代码要解耦,数据库也是一样的。
    

product_categories (产品分类表)

  • id: 分类的唯一标识符,bigint类型。

  • category_name: 分类名称,varchar(255)类型。

  • product_id: 关联的产品ID,bigint类型。

  • extra_field2: 扩展字段2,text类型。

  • extra_field3: 扩展字段3,int(0)类型。

  • extra_field4: 扩展字段4,tinyint(0)类型。

  • extra_field5: 扩展字段5,timestamp(0)类型。

  • created_at: 创建时间戳,datetime(0)类型。

  • updated_at: 更新时间戳,datetime(0)类型。

  • deleted_at: 删除时间戳,timestamp(0)类型。

      为什么: 1.这是一张以解耦为设计的表,用产品表字段id相互关联,把产品名称分出去,这是一张搜索表。
             2.通常在spring里这张表是不存在mysql数据库里,一般在搜索数据库里,mysql是关系数据库,检索它不擅长,而且大部分业务都存在mysql里,再去干搜索的活,数据库压力太大。
             3.如果不分出去设计,到时候把产品信息也存进去,不仅内存占用大,维护的时候,工作量直接起飞。
    

cart_items (购物车项表)

  • id: 购物车项的唯一标识符,无符号bigint类型。

  • user_id: 用户ID,varchar(64)类型。

  • product_id: 产品ID,bigint类型。

  • quantity: 数量,bigint类型。

  • created_at: 创建时间戳,datetime(0)类型。

  • one: 扩展字段1,varchar(25)类型。

  • two: 扩展字段2,varchar(25)类型。

  • three: 扩展字段3,varchar(25)类型。

  • four: 扩展字段4,varchar(25)类型。

                 为什么: 1.这是一张购物车表,你们设计的时候可以把_items去掉这个是多余的。
                        2.这张表是用户在登录后,添加购物车即可,所以得关联usr表id,产品表id
                        3.需要注意的是这张表的quantity字段,根据前端传多少就是多少,下单的时候在减少库存。
    

products_quantity (产品数量表)

  • id: 记录的唯一标识符,int(0)类型。

  • products_id: 产品ID,bigint(0)类型。

  • quantity: 数量,bigint(0)类型。

  • one: 扩展字段1,varchar(255)类型。

  • two: 扩展字段2,varchar(255)类型。

  • three: 扩展字段3,varchar(255)类型。

    为什么1.产品数量表,这张表就是典型的经常需要操作的表,这张表quantity是库存字段,下单的时候需要的产品数量-库存数量。所以这里涉及一个问题。如果库存量剩余一,两个人同时下单,如何解决?---加锁