数据库设计步骤(超级详细)|数据库

数据库设计

我们先来看这样一个问题
假如遇到下面这样的设计需求,我们如何完成数据库的设计呢?

设计需求:

假设商品经销商有基本实体集:供应商Vendors、产品目录Products、顾客信息Customers和顾客订单Orders

各个实体的属性集:

(1)供应商Vendors:

供应商ID(vend_id),供应商名(vend_name),供应商地址(vend_address),供应商所在城市(vend_city),供应商所在州(vend_state),供应商地址邮政编码(vend_zip)
,供应商国家(vend_country)

(2)产品目录Products:

产品ID(prod_id),产品名(prod_name),产品价格(prod_price),产品描述(prod_desc)

(3)顾客列表Customers:

顾客ID(cust_id),顾客名(cust_name),顾客地址(cust_address),顾客城市(cust_city),顾客所在州(cust_state),顾客地址邮政编码(cust_zip),顾客所在国家(cust_country),顾客联系名(cust_contact),顾客电子邮箱(cust_email)

(4)顾客订单Orders:

顾客订单号(order_num),订单日期(order_date)

实体间的联系:

每个供应商能供应多个产品;顾客可以下多个订单,订单可以预定多件商品,而商品可以对应不同订单。

问题

请根据以上需求完成如下操作:
(1)对以上描述进行分析,进行数据库概念模型的设计(即确定各个实体、属性及联系并绘制E-R图)。
(2)将(1)中概念模型转换关系型逻辑模型,并标出各个关系模式的主码和外码
(3)将所转换成的关系型数据模型在SQL Server中进行实现

我想可能有人看到这里脑子就有点疼了,这是啥玩意,我们究竟要怎么开始动手写

注意上面的红色关键字
不用担心,现在跟我一起开始学习

完成步骤:

根据题目要点我们先讲讲一些必要知识
1、什么是数据库概念模型
2、什么是关系型逻辑模型,什么是主码和外码
3、如何从概念模型转换成关系型逻辑模型
4、如何利用SQL语句在DBMS中实现(不一定是SQL Server 你也可以使用mysql等)

1,什么是数据库概念模型?

谈到这个,得先知道什么是概念模型

抽象意义上
在这里插入图片描述
虽然现实中的信息不能直接转化为计算机中的数据

但是我们可以通过概念模型向DBMS支持的数据模型的转换来实现这一步骤(概念模型向DBMS支持的数据模型的转换,本质上是对信息世界的进一步抽象,是信息世界的形式化和数据化,反映了数据之间的联系和数据的共性特征,由此形成由数据模型描述的数据世界)

数据模型包括了概念模型,逻辑模型,物理模型三部分
数据模型
也就是说概念模型是数据模型的一类
而在数据库中我们讨论最多的概念模型便是ER模型(Entity-relationship model),E-R模型在数据库设计中被广泛用作数据建模的工具
E-R模型
相关概念解释:
(1)实体:是存在于用户组织中的抽象的但有意义的“事物”
在上面问题中 指的是供应商Vendors、产品目录Products、顾客信息Customers和顾客订单Orders
(2)属性:是指实体集中所有试题所具有的共同特征
在上面问题中 指的是供应商ID(vend_id),供应商名(vend_name),供应商地址(vend_address)等
(3)码:一般把能够唯一地标识实体集中每一个不同实体的一个或一组属性称为实体集的标识码。(其实这便是主码或叫做主键)
在上面问题中 指的是比如供应商的实体集中供应商ID(vend_id)便是标识码
(4)联系:实体之间的联系,是指实体集之间有意义的相互作用及相对应关系。
在上面问题中 指的是每个供应商能供应多个产品;顾客可以下多个订单,订单可以预定多件商品,而商品可以对应不同订单这体现了1对多,多对1 ,多对多等对应关系

第一步,数据库概念模型就解释完成了
简略的说,数据库概念模型一般指的就是E-R模型,它其中与实体,属性,码,联系等相关
可能我解释的可能很抽象 ,但是我们已经可以根据我们对数据库概念模型的理解完成第一小题啦!,接下来就是实现过程,可以跟着接下来对上面内容进一步理解

(1)对以上描述进行分析,进行数据库概念模型的设计(即确定各个实体、属性及联系并绘制E-R图)

画之前看看E-R图注意要点:
在这里插入图片描述
即E-R图里面得包含以上四点
在这里插入图片描述
实体在E-R图画成矩形
联系在E-R图里画成菱形
两实体联系比值在连线上标识
属性在E-R图里画成椭圆
在这里插入图片描述

第一小题的E-R图如下:
E-R图

我们可以发现每个实体,比如vendors供应商上连接着他的属性集的每个属性,同时与其他实体比如products产品目录有联系——“供应”,一个供应商能提供多件商品,所以在连线上是1:n
这样就把我们上面解释的实体 属性 联系等都体现出来了

但是不知道你们有没有发现在products和orders之间的联系预定上居然连接着三个属性,这是因为什么呢???
这个我们接下来讲完 3、概念模型转换到关系模型 再进一步解释

2、什么是关系型逻辑模型,什么是主码和外码

在我们介绍数据模型的时候我们说数据模型包含概念模型,逻辑模型,物理模型
而逻辑模型便包括了我们要说的关系模型在这里插入图片描述
在关系模型中,一个二维表格及其数据就构成了一个关系。
而我们除了用表格表示,我们一般会用关系模式表示
例如:
在这里插入图片描述
而其中主码是一个能唯一标识一个元组的属性。
这里比如是学生中的学号S#
而关于我们的题目主码则是vend_id,prod_id,cust_id等

而其中外码是如果一个关系中的一个属性是另外一个关系中的主码则这个属性为外码。
比如这里学号S#是学习关系中的一个属性,但是S#同时也是学生关系的主码,所以这个属性为学习关系中的外码
而关于我们的题目外码则是vend_id,cust_id等

3、如何从概念模型转换成关系型逻辑模型

ok,我们已经到了最重要的转换过程,离解决第二小问只有一小步,在此之前我们先结合我们学的前两点了解之前留下的小问题
为什么在products和orders的联系“预定”上会有属性与它连接?

这得先从联系预定的n:m说起
关于联系的比例
1:1

遇到1:1 关系的话在两个实体任选一个添加另一个实体的主键即可。

1:N

1:N 遇到 1:N 关系的话在N端添加另一端的主键,假如有学生和班级两个实体,一个班级可以容纳多个学生,但是一个学生只能选择一个班级, 因此班级和学生是1:N的关系,现在要转换为关系模型, 我们只需在学生的这端加上班级的唯一标识即可,这样做的原因是,因为一个学生只能有一个班级,班级是相对学生唯一的。

N:M

遇到N:M我们需要将联系转换为实体(问题的关键!!!!解释了为什么联系能够连接属性,因为他已经变成了一个实体),然后在该实体上加上另外两个实体的主键作为联系实体的主键,然后再加上该联系自身带的属性即可。例如有学生和老师两个实体, 一个学生可以由多名老师来授课,一名老师也可以授课多名学生,它们是M:N关系的,假如联系为授课,该联系上有成绩属性,因此当我们把它转换为关系模型时,我们把联系转换为联系实体,并添加学生实体的主键(学号)和教师实体的主键(教师编号)作为自己的主键,值得注意的是,授课实体的外键分别是学号和教师编号,但是它的主键是(学号,教师编号),另外它还拥有自己的一个属性成绩。

1:1:N

这是三元联系的对应关系,但是当转换为关系模型时,和1:N的情况是差不多的。我们只需将N端添加另外两端的主键即可。

M:N:P

这种三元联系的三种多对应关系,看上去很复杂,其实转换起来并不是那么复杂了,我们要做的仅仅是将其中的联系转换为联系实体,然后在联系实体上添加M端N端P端的主键,然后加上联系实体自身的属性,就行了。

举个例子:
在这里插入图片描述

这是一份关于商店商品仓库的ER图。

先看仓库和商品之间是M:N的关系,于是我们首先想到的应该是
把联系 库存转换为库存实体。
库存 (仓库号商品号,日期,库存量)
然后是商品实体和仓库实体
商品(商品号,商品名,单价)
仓库(仓库号,仓库名,地址)
这样就实现了从概念模型到关系模型的转换(注意联系库存除了把两个实体的主键属性带上了以外还带上了原本自身就有的属性)

搞定上面内容后
我们来看看第二题怎么实现

(2)将(1)中概念模型转换成关系型逻辑模型,并标出各个关系模式的主码和外码

第二步:将(1)中概念模型转换成关系型逻辑模型

在这里插入图片描述

根据E-R图进行转换

其中红色为主键,绿色为外键

(1)供应商Vendors:
vend_id,vend_name ,vend_address,vend_city,vend_state,vend_zip,vend_country)

(2)产品目录Products:
(prod_id, vend_id ,prod_name, prod_price, prod_desc)

(3)顾客列表Customers:
(cust_id, cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country, cust_contact, cust_email)

(4)顾客订单Orders:
(order_num,cust_id order_date)

(5)预定OrderItems:
(order_num,order_item,prod_id,quantity,item_price)

希望大家可以认真对着E-R图和关系认真比对看看,理解转换原理

4、如何利用SQL语句在DBMS中实现(不一定是SQL Server 你也可以使用mysql等)

这里实际上就是解决第3小问

(3)将所转换成的关系型数据模型在SQL Server中进行实现

首先建成数据库
在这里插入图片描述
在这里插入图片描述
之后就是插入数据

CREATE TABLE Customers
(
  cust_id      char(10)  NOT NULL ,
  cust_name    char(50)  NOT NULL ,
  cust_address char(50)  NULL ,
  cust_city    char(50)  NULL ,
  cust_state   char(5)   NULL ,
  cust_zip     char(10)  NULL ,
  cust_country char(50)  NULL ,
  cust_contact char(50)  NULL ,
  cust_email   char(255) NULL ,
  primary key(cust_id)
);
CREATE TABLE Orders
(
  order_num  int      NOT NULL ,
  order_date datetime NOT NULL ,
  cust_id    char(10) NOT NULL ,
  primary key(order_num),
  foreign key(cust_id)
  REFERENCES Customers(cust_id)
);

CREATE TABLE Vendors
(
  vend_id      char(10) NOT NULL ,
  vend_name    char(50) NOT NULL ,
  vend_address char(50) NULL ,
  vend_city    char(50) NULL ,
  vend_state   char(5)  NULL ,
  vend_zip     char(10) NULL ,
  vend_country char(50) NULL ,
  primary key(vend_id)
);

CREATE TABLE Products
(
  prod_id    char(10)      NOT NULL ,
  vend_id    char(10)      NOT NULL ,
  prod_name  char(255)     NOT NULL ,
  prod_price decimal(8,2)  NOT NULL ,
  prod_desc  text          NULL,
  primary key(prod_id),
  foreign key(vend_id)
  references Vendors(vend_id)

);

CREATE TABLE OrderItems
(
  order_num  int          NOT NULL ,
  order_item int          NOT NULL ,
  prod_id    char(10)     NOT NULL ,
  quantity   int          NOT NULL ,
  item_price decimal(8,2) NOT NULL ,
  primary key(order_num,order_item),
  foreign key(order_num)
  references Orders(order_num),
  foreign key(prod_id)
  references Products(prod_id)
);

第三问就轻松搞定啦

结语

通过上面我们解决了一个如何设计数据库的一个具体例子,希望我能帮到你们,如果有什么不对的地方,欢迎指正,也欢迎在评论区提问,谢谢大家!

数据库设计系列:数据库设计 数据库设计系列:数据库设计5步骤 步骤 数据库设计5步骤 1.确定entities及relationships a)设计宏观⾏为。你⽤此数据库来做什么?⽐如,希望管理雇员的信息。 b)确定entities。对于⼀系列的⾏为,确定所管理信息所涉及到的主题范围。这将变成table。⽐如,雇⽤员⼯,指定具体部门,确定技能等级。 c)确定relationships。看着⾏为,确定tables之间有何种关系。⽐如,在部门与雇员之间存在⼀种关系。给这种关系命名。 d)细化⾏为。你从宏观⾏为开始,现在仔细检查这些⾏为,看有哪些⾏为能转为微观⾏为。⽐如,管理雇员的信息可细化为: 增加新员⼯ 修改存在员⼯信息 删除调⾛的员⼯ e)确定业务规则。看着你的业务规则,确定你要采取哪种。⽐如,可能有这样⼀种规则,⼀个部门有且只能有⼀个部门领导。这些规则将被设计数据库的结构中。 范例: ACME是⼀个⼩公司,在5个地⽅都设有办事处。当前,有75名员⼯。公司准备快速扩⼤规模,划分了9个部门,每个部门都有其领导。 为有助于寻求新的员⼯,⼈事部门规划了68种技能,为将来⼈事管理作好准备。员⼯被招进时,每⼀种技能的专业等级都被确定。 定义宏观⾏为 ⼀些ACME公司的宏观⾏为包括: 招聘员⼯ 解雇员⼯ 管理员⼯个⼈信息 管理公司所需的技能信息 管理哪位员⼯有哪些技能 管理部门信息 管理办事处信息 确定entities及relationships 我们可以确定要存放信息的主题领域(表)及其关系,并创建⼀个基于宏观⾏为及描述的图表。 我们⽤⽅框来代表table,⽤菱形代表relationship。我们可以确定哪些relationship是⼀对多,⼀对⼀,及多对多。 这是⼀个E-R草图,以后会细化。 细化宏观⾏为 以下微观⾏为基于上⾯宏观⾏为⽽形成: 增加或删除⼀个员⼯ 增加或删除⼀个办事处 列出⼀个部门中的所有员⼯ 增加⼀项技能 增加⼀个员⼯的⼀项技能 确定⼀个员⼯的技能 确定⼀个员⼯每项技能的等级 确定所有拥有相同等级的某项技能的员⼯ 修改员⼯的技能等级 这些微观⾏为可⽤来确定需要哪些table或relationship。 确定业务规则 业务规则常⽤于确定⼀对多,⼀对⼀,及多对多关系。 相关的业务规则可能有: 现在有5个办事处;最多允许扩展到10个。 员⼯可以改变部门或办事处 每个部门有⼀个部门领导 每个办事处⾄多有3个电话号码 每个电话号码有⼀个或多个扩展 员⼯被招进时,每⼀种技能的专业等级都被确定。 每位员⼯拥有3到20个技能 某位员⼯可能被安排在⼀个办事处,也可能不安排办事处。 2.确定所需数据 要确定所需数据: 1. 确定⽀持数据 2. 列出所要跟踪的所有数据。描述table(主题)的数据回答这些问题:谁,什么,哪⾥,何时,以及为什么 3. 为每个table建⽴数据 4. 列出每个table⽬前看起来合适的可⽤数据 5. 为每个relationship设置数据 6. 如果有,为每个relationship列出适⽤的数据 确定⽀持数据 你所确定的⽀持数据将会成为table中的字段名。⽐如,下列数据将适⽤于表Employee,表Skill,表Expert In。 如果将这些数据画成图表,就像: 需要注意: 在确定⽀持数据时,请⼀定要参考你之前所确定的宏观⾏为,以清楚如何利⽤这些数据。 ⽐如,如果你知道你需要所有员⼯的按姓⽒排序的列表,确保你将⽀持数据分解为名字与姓⽒,这⽐简单地提供⼀个名字会更好。 你所选择的名称最好保持⼀致性。这将更易于维护数据库,也更易于阅读所输出的报表。 ⽐如,如果你在某些地⽅⽤了⼀个缩写名称Emp_status,你就不应该在另外⼀个地⽅使⽤全名(Empolyee_ID)。相反,这些名称应当是Emp_status及Emp_id。 数据是否与正确的table相对应⽆关紧要,你可以根据⾃⼰的喜好来定。在下节中,你会通过测试对此作出判断。 3.标准化数据 标准化是你⽤以消除数据冗余及确保数据与正确的table或relationship相关联的⼀系列测试。共有5个测试。本节中,我们将讨论经常使⽤的3个。 关于标准化测试的更多信息,请参考有关数据库设计的书籍。 标准化格式 标准化格式是标准化数据的常⽤测试⽅式。你的数据通过第⼀遍测试后,就被认为是达到第⼀标准化格式;通过第⼆遍测试,达到第⼆标准化格式;通过第三遍测试,达到第三标准化格 式。 如何标准格式: 1. 列出数据 2. 为每个表确定⾄少⼀个键。每个表必须有⼀个主键。 3. 确定relationships的键。relationships的键是连接两个表的键。 4. 检查⽀持数据列表中的计算数据。计算数据通常不保存在数据库中。 5. 将数据放在第⼀遍的标准化格式中:
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值