IT源码网

数据库设计的基本流程讲解

wyy 2021年04月03日 程序员 177 0

引言

最近,本帅在进行无聊的复试备考,而哈工程复试是要求的数据库概论,和网络安全盖伦,是的,盖伦,肉的恶心,我学了很久,经过不懈的钻研,终于摸索出来了数据库设计的基本流程,那么,下面跟着本帅一起进行数据库设计的探索吧!

流程

  1. 建立概念模型ER图
  2. 根据ER图写出表
  3. 根据范式要求写出符合范式要求的表

建立ER图,并根据ER图建立初始表

  1. 找出实体(尽量找大类,相当于java中的类,不是找个体,并且实体可以用叠词形容词来形容)

  2. 找出属性,并标记出关键字属性

  3. 找出各个实体间的联系

    1.注意联系之间的元数 
    2.确定联系的基数(1对1,1对多,多对多) 
    

注:
1.实体=表属性=表中字段(属性)
2.表实际上就结构化的关系的集合,也称为关系。
而集合与集合之间就是一种映射关系,映射关系可以分为一一对应,一对多(包含),多对多(你中有我,我中有你,相互包含)。

假设我们有一种映射关系叫做夫妻关系f,x∈{女人},y∈{男人},且有表记录有关信息如下:
女人实体表(身份证,姓名,身高,…)
男人实体表(身份证,姓名,身高,…)

a.假设我们在近代,那么f这个关系便是一一对应的,我们如何表示这种一一对应关系呢
我们会表示成f(x)= y。 也就是,x的老公是y
由于是单值函数,写成t(y)=x也可以,即也能表示为y的老婆是x
那么我们如何在表中记录下来这个映射关系呢
很简单,我们可以在男人实体表或者女人实体表中加上一个字段,引用唯一标识对方身份的属性,来表示夫妻是谁。
即:
男人实体表(身份证,姓名,身高,…)
女人实体表(身份证,姓名,身高,…,老公身份证)

或者,

男人实体表(身份证,姓名,身高,…,老婆身份证)
女人实体表(身份证,姓名,身高,…)

那么,这个引用唯一标识对方身份的字段(即主键),就是外键
而这种一一对应的关系,实则就是联系中的1对1联系

b.假设我们在古代,那么f这个关系便是一对多的,我们又如何表示这种关系呢
很简单因为古代是一个男人y可以娶多个女人xi(i=0,1,…)
我们可以记作f(xi)=y,也就是xi对应的这几个女人都是y这个男人的老婆。
因此我们可以借鉴上面1对1在表中表示的映射关系,将唯一能标识男人y的属性(男人实体表中的主键)引用到女人实体表中,这样就能表示这种一夫多妻的关系了。我们可以把1对多这种关系在表中表示如下:

女人实体表(身份证,姓名,身高,…,老公身份证)
女人x1(身份证1,姓名1,身高1,老公y.身份证号)
女人x2(身份证2,姓名2,身高2,老公y.身份证号)

女人xi(身份证i,姓名i,身高i,老公y.身份证号)

这样,女人xi的老公都是y,清楚的表示了出来

因此,联系中的1对1和1对多,都是采用引入外键的形式,来标注表1对应的实体与表2之间的一种映射关系。其中联系基数为1的1端所在实体表中的主键被多端所在实体表作为外键引用。

c.而多对多,实际上就是两个实体之间都是能有1对多的关系,按照上面的分析,我们需要在多端对应的实体中引用1端的主键作为外键,因此由于可以拆成两个多对多,我们分别两个实体的主键都要引入做外键,而且为了保持映射关系,不能放入到一个任意一个表中,因此需新建一个表,引入两个外键来表示这种多对多的映射关系。

m:n -> 1:m + 1:n;

至此,我们就能用er图将表写出大概的表。

写表规则:

  1. 每个实体对应一个表,属性对应一个字段
  2. 注意多对多联系,多对多联系实质上也是一个表,而且会继承联系的实体主键做外键
  3. 写完表后进行一定的整合,去除一部分冗余

用范式将表进行规范化

ER图与表的初始转换

范式规则

范式 规则
1NF 单位格不可再分
2NF 对候选键完全依赖
3NF 没有传递依赖
BCNF F函数依赖集合中左边都是候选键(起决定作用的都是候选键)

以上范式规则都提到了候选键,那么如何找候选键呢?
假设给定关系集合R={A,B,C,D} 有F={B->D,D->B,AB->C}

1.L(仅在F左边出现):A
LR(既在左边出现,又在右边出现):B,D
R(尽在F右边出现):C(在右边出现证明不能决定别人,因此一定非候选键)
2.对L和LR中的进行组合计算闭包(能决定的元素集合)
A+={}
AB+={A,B,C,D}=R
AD+={A,B,C,D}=R
因此AB和AD都能决定R,所以是候选键

范式判断流程图
在这里插入图片描述

发布评论
IT源码网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

救救孩子系列!!汉明校验码的原理,看完不懂你打我!!讲解
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。