第 13 章 · 第五节
13.2 要把图翻成关系模式
图画完了,接下来一条条翻成能写 CREATE TABLE 的样子。

重 点
翻译有固定规则,会背规则这一步就是机械劳动。
知道更多
同一张图换成别的数据模型,翻出来就不是关系模式了。
想一想
这一步之后还差什么才能真的建表?
图画完了,接下来一条条翻成能写 CREATE TABLE 的样子。

翻译有固定规则,会背规则这一步就是机械劳动。
同一张图换成别的数据模型,翻出来就不是关系模式了。
这一步之后还差什么才能真的建表?
把概念模型转成某个具体数据库支持的数据模型。

我们用的是关系数据库,所以目标就是一组关系模式。
如果目标是别的模型,转换规则就不是这三条了。
1:1 两边的键都是候选键,1:n 用 n 端的键,m:n 用两个键的组合。

| 关系模式 | 主码 | 几张表 |
|---|
实体转表没有例外,属性照搬,键做主码。难的全在联系上。
实体别漏、联系别漏、主码要标出来、1:n 其实不产生新表。

1:n 那句话说的是最终结果,中间先转成模式再合并也一样。
三个以上实体的联系,键组合起来太长时可以另设一个自增主码。
先转再合并,跟一步到位差在哪?
转出来还要验范式,还要看功能够不够、性能行不行。

功能评价对着需求逐条查,性能评价看存取次数和传送量。
| 发现什么 | 怎么改 |
|---|---|
| 功能不够 | 加模式加属性 |
| 性能不行 | 合并或者分解 |
为什么规范化之后还可能要合并?
七个实体七个关系模式,属性照抄,键做主码。

这一步没有判断,抄就完了,抄的时候顺手把主码标出来。
图上写密码邮箱,这一页写登录邮箱,指的是同一个属性。
地址表里的电子邮箱,跟用户表里的是一回事吗?
多对多的三张各自成表,一对多的三张先按规矩也转出来。

七加六等于十三,每一个都到了 3NF。

图画得好,转出来天生就是 3NF,因为一个模式只讲一件事。
部分依赖和传递依赖都来自一张表混装几件事,图上早就分开了,自然没有。
那还有必要再验一遍吗?