一.模式分解
模式分解的前提是先求出极小函数依赖集和模式的候选码,这部分讲解在之前发布的博客里有提到,不太清楚的可以移步上一篇
一般我们只需要将模式分解到3NF即可,有两种情形:保持函数依赖和保持无损连接的
那具体怎么分解呢?
我们知道,3NF是建立在2NF基础上的,它要求模式同时具备不含有非主属性的部分依赖和传递依赖,这就需要我们对原模式分解为若干小模式,让它们都是3NF。那是不是意味着我们要找出所有的部分和传递依赖然后单提出去呢?其实并不是。试想一下如果一个函数依赖集里面的函数依赖很多,甚至可能很复杂,那么一个个去找显然很费时费力。
其实做法很简单,只需要把每个函数依赖都单独拿出去,形成一个新的模式,左部属性相同的函数依赖合在一起。这样做的目的就是让每个模式左部都是唯一的,不会产生上述那两种函数依赖的干扰,这样就可以保证每个模式都是3NF的。
因为我们把每个函数依赖都考虑到了,不存在哪个依赖是被忽略或者丢到的,因此这种方式的结果就是保持函数依赖的3NF分解。
如何得到保持无损连接的3NF分解呢?其实也很简单,保持函数依赖时可能没有将候选码考虑进去,即便函数依赖没有丢失,但还原回原模式时可能会不匹配。因此无损连接就解决了这一问题,也就是在上述做法后,看看候选码有没有存在于任意一个模式中,如果没有,就把候选码也加进去形成一个模式,就得到无损连接了。
二.E-R图转化为关系模式
画E-R图没什么难的,只需要记住方框表示实体、椭圆表示属性、菱形表示联系,把实体之间的关系(1:1 or 1:n or m:n)标注清楚就可以了
主要来看E-R图转化为关系模式
这也是在概念设计模式(绘制E-R图)结束后我们要进行的操作,也就是进行逻辑结构设计,转化为数据库管理系统支持的模型,一般来说就是转化为关系模型,我们也着重探讨关系模式的转化
有同学可能有疑惑,转化为关系模式难道不就是把实体以及它的属性列出来吗,为什么还要拎出来讲解呢?实际上,不少同学开始学可能都存在着误区,E-R图不是简单的一张实体图,他还有关系,是关系在约束着实体之间的联系,比如主外键等,因此转化为关系模式时单纯把实体与各自属性列出来是不够的,还要考虑关系的影响
首先我们要先理解并记住这三个规则:
1.对于1:1的实体联系,在任意一端的实体中加入另一端实体的主码(作为外码)以及联系属性
理解:不论正向还是反向都是唯一对应的,可以理解为这两个实体是互相依赖的,任意选择一个实体加入另一个实体的主码,作为该实体的外码,以建立这种联系
2.对于1:n的实体联系,在n端实体里加入1端的主码(作为外码)以及联系属性
理解:正向是一对多反向是一对一,可以理解为n端是依赖于1端实体的,所以要在n端实体中加入1端的主码作为自己的外码,
3.对于m:n的实体联系,把联系也拿出来作为关系模式,将两端的主码加进去合并成一个主码,并把联系属性也加进去
理解:这种多对多的关系,属性奖两方面都考虑到了,所以有必要讲属性单独拎出来作为关系模式处理
★做题思路:
1.先把所有实体列出来,可以先打个左括号,把实体自身属性先写进去
2.根据上述的规则,把应该加的东西再加进去,都加完再把右括号括上,这个关系就写完了
3.在关系模式中用下划线把主码标出来(可以不做,看具体要求)
4.根据关系模式把主外码写出来(外码是新加进去的别的关系里的主码)
来道题实战一下:
答案:
职工(职工号,姓名,技术等级,工厂编号,聘期,工资) 主码:职工号 外码:工厂编号
工厂(工厂编号,厂名,地址) 主码:工厂编号 外码:无
产品(产品号,产品名,规格) 主码:产品号 外码:无
生产(工厂编号,产品号,数量) 主码:(工厂编号,产品号) 外码:工厂编号,产品号
你学会了吗?关注更多......

2609

被折叠的 条评论
为什么被折叠?



