2021-08-18

如何设计商城的数据库模型

让我们用一个简单的商城数据库的例子,来介绍DDM Cloud的使用方式吧。
首先我们先进行需求分析, 这个商城需要哪些功能,例如:
用户,商品,商品分类,购物车,订单等等.

用户: 用户名(用于登录),密码,登录时间

商品: 商品名称, 简介, 详细信息, 商品价格, 库存数量

商品分类: 分类名称

购物车: 购买的商品, 购买数量, 用户, 加入时间

订单: 商品集合, 价格, 数量, 支付情况, 用户, 订单生成时间和支付时间.

以上是我们最简单的商城系统所需要的内容啦。下面让我们使用DDMCloud来设计这个简单的商城系统的数据库模型。

下载客户端

软件下载页面:https://datamodeling.cn/#/main/download

创建并保存模型

要设计数据库模型,首先要在DDMCloud创建一个模型。下面以常见MySQL模型为例
在这里插入图片描述

创建后的模型如下所示
在这里插入图片描述
在这里插入图片描述
在属性中更改模型的名字为“商城”。然后按下Ctrl + S保存模型到模型库中
在这里插入图片描述

保存模型后,下次就可以直接在模型库中打开使用
在这里插入图片描述

数据库设计

模型创建完成后,让我们来进行表的设计。

表操作

用户

首先从用户表开始,用户表需要的字段为:用户名(username)、密码(password)、登录时间(last_login_time),此外,还需要一个主键字段,就使用MySQL自动增长类型吧。

大致的表结构设计好了,接下来我们就使用DDMCloud创建一个数据库表,直接上图

创建表

方式一:
在这里插入图片描述

方式二

首先,需要打开模型的数据视图,然后在开始功能区选择“实体/表“,最后在数据视图上绘制即可。
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

小技巧:在数据视图选择表后,按TAB键可以编辑表名、字段名和主键字段名

首先修改表名为user,然后添加相关的字段。

修改表名

在这里插入图片描述
在这里插入图片描述

创建字段

在这里插入图片描述在这里插入图片描述
点击“确定“,基本的字段就创建完成了。

创建索引

有些字段查询的频率可能较高,我们可以创建索引来加快查询速度。MySQL常用的索引一般有主键索引、唯一索引、非唯一索引等。

例如username字段,经常需要通过用户名来查询用户的信息,而且不会重复。我们可以给username添加一个唯一索引来加快查询速度,操作如下:
在这里插入图片描述
在这里插入图片描述

可以看到,索引编辑器中显示已存在一个主键索引,这是因为上一步勾选了id为主键时,自动创建的。现在我们想要给username添加一个唯一索引,可以这样操作
在这里插入图片描述

现在,User表创建已经完成。

商品和商品分类

商品: 商品名称, 简介, 详细信息, 商品价格, 库存数量

商品分类: 分类名称

基于上方的信息描述,可以设计出以下数据库表:

商品(commodity) :
ID(id)、商品名(name)、简介(introduction)、价格(price)、库存(stock)、商品分类ID(category_id)

商品详细(commodity_detail): 商品ID(commondity_id)、描述(description)

商品分类(commodity_category): ID(id)、分类名字(name)

为了简单起见,我们这里统一使用MySQL的自增长类型作为表的主键。

商品的详细描述信息的体积可能会比较的大,但大多数情况的查询是不需要找到商品的详细描述的,所以我们把商品的详细分离出单个表,这样有助于提高查询效率。

首先,需要创建这3个表并设置好字段等基本信息。具体方式在上文中已描述,在此不再过多的赘述。

好了,现在我们的商城系统中已经有以下几个表:
在这里插入图片描述

感觉少了点什么 ??

没错,是关系!!!关系型数据库怎么能没有关系呢?

让我们把表都刚刚创建的表关联起来。

比如说,要创建表commodity和commodity_detail的关系。这两个表中commodity对与commodity_detail是一对多的关系,commodity的id字段要和commodity_detail的commodity_id字段相对应起来。

首先,先在“数据模型”窗口找到“关系”,然后点“新建“ …… 算了,还是直接上图吧:
在这里插入图片描述
在这里插入图片描述

完成创建后,这数据视图就可以看到他俩的关系啦。
在这里插入图片描述

好了,让我们用同样的方式创建commodity和commodity_category的关系.
在这里插入图片描述在这里插入图片描述

到现在为止,商品的基本关系就已经创建好了,让我们进入下一个阶段。

购物车和订单

购物车: 购买的商品, 购买数量, 用户, 加入时间

订单: 商品集合, 价格, 数量, 支付情况, 用户, 订单生成时间和支付时间.

老规矩,还是先设计一下数据库表

购物车(cart):ID(id)、用户ID(user_Id)、商品ID(commondity_id)、购买的数量(quantity)、加入时间(join_time)

订单(order):
ID(id)、用户ID(user_id)、支付情况(payout_status)、订单生成时间(create_time)、订单支付时间(payment_time)

订单商品项(order_item):
ID(id)、订单ID(order_id)、商品ID(commondity_id)、购买的数量(quantity)

首先来分析一下购物车。一个用户的购物车中可以包含多个条目,而这每个条目需要包含购买的商品、购买的数量、加入购物车的时间这些信息的。所以我们可以创建一个购物车表来存储这些条目。

为了让每个用户都有一个独立的购物车,我们还需要给这个条目该条目属于哪个用户的信息。所以用户表和购物车表是个一对多的关系。

然后在再来看订单。

价格、支付情况、订单生成时间、订单支付时间,这些都可以作为表的普通字段。

但是,订单中需要包含购买商品的集合。也就是说,一个订单可以对应与多个商品,一个商品又可以对应与多个订单,订单和商品是一个多对多的关系。

完成表的设计后,我们先把表创建出来。现在我们的模型如下
在这里插入图片描述
然后来处理一下关系

cart和user
在这里插入图片描述

cart和commodity
在这里插入图片描述

order和user
在这里插入图片描述
order和order_item
在这里插入图片描述
order_item和commodity
在这里插入图片描述
关系太多,很乱?

别急,这时候打开你的数据视图就会发现表之间的关系一目了然。
在这里插入图片描述

好了,现在商城的数据库模型就设计好了。

将设计好的模型导入MySQL数据库

现在数据库设计好了,那么如何把他保存到数据库中呢?很简单,只需3步。

第一步
在这里插入图片描述

第二步 生成DDL脚本
在这里插入图片描述

第三步 在数据库中执行脚本,完成
在这里插入图片描述

这个数据可以使用Python进行解析和处理。可以按照以下步骤进行: 1. 将数据分割成每个数据项。 ``` data_items = data.split(',') ``` 2. 对于每个数据项,将其按#分割成四个小项,并存储到一个列表中。 ``` data_list = [] for item in data_items: item_list = item.split('#') data_list.append(item_list) ``` 3. 对于每个小项,进行相应的类型转换。 ``` for item in data_list: item[0] = int(item[0]) # 题号转换为整数 item[1] = datetime.datetime.strptime(item[1], '%Y-%m-%d %H:%M:%S') # 时间转换为datetime类型 if item[2] != '': # 操作类型转换为整数 item[2] = int(item[2]) item[3] = str(item[3]) # 科目转换为字符串类型 ``` 4. 可以按照需要对数据进行进一步处理,如按照题号、时间等进行排序、筛选等操作。 完整的Python代码如下: ``` import datetime data = '''1#2021-05-18 14:31:55##初级会计实务,2#2021-05-18 14:31:57#12#初级会计实务,2#2021-05-18 14:32:08##初级会计实务,3#2021-05-18 14:32:09#12#初级会计实务,4#2021-05-18 14:32:34#12#初级会计实务,4#2021-05-18 14:32:45##初级会计实务,5#2021-05-18 14:32:46#12#初级会计实务,5#2021-05-18 14:32:57##初级会计实务,6#2021-05-18 14:33:00#12#初级会计实务,7#2021-05-18 14:33:44#12#初级会计实务,7#2021-05-18 14:34:42##初级会计实务,8#2021-05-18 14:34:43#12''' # 将数据分割成每个数据项 data_items = data.split(',') # 对于每个数据项,将其按#分割成四个小项,并存储到一个列表中 data_list = [] for item in data_items: item_list = item.split('#') data_list.append(item_list) # 对于每个小项,进行相应的类型转换 for item in data_list: item[0] = int(item[0]) # 题号转换为整数 item[1] = datetime.datetime.strptime(item[1], '%Y-%m-%d %H:%M:%S') # 时间转换为datetime类型 if item[2] != '': # 操作类型转换为整数 item[2] = int(item[2]) item[3] = str(item[3]) # 科目转换为字符串类型 print(data_list) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值