一、范式
范式的正确设计,有利于减少数据的冗余与数据的不一致性。
第一范式
定义: table中每一行每一列对应的data都是unique的。
本部分使用的bookshop table来做示范。
上面这个表中的数据,每一行是独立的,我们可以根据id提取出对应的row
但是,each cell of the table don’t have single value, 其中有两列对应着两个value;不符合第一范式的要求;所以我们应该添加额外的一行,将AUTHOR_NAME
和对应的AUTHOR_ID
拎出来,将其他元素复制,这样新生成的table就满足了第一范式。
第二范式
定义:
- 满足第一范式
- 不包含任何的部分依赖(partial dependencies)
本部分使用如下表格进行说明。
上表格中,我们很容易得知,其满足第一范式。
但是入下图中红框框出来的部分所示:
随着表中行数的增加,我们将不必要地存储越来越多的相同信息。如果作者更新了他们的简历,我们必须更新所有这些事件。
为了消除部分依赖,使其满足第二范式,我们可以将重复的部分单独拎出来建一个表。比如这个例子,我们再单独建立一个名字为BookShop_AuthorDetails
的表。通过Author_ID
将两个表链接起来,然后将原表格中冗余的部分删除掉。
如下所示:
那么现在,我们的tables就满足了第二范式。
二、key
key有助于唯一的确定对应地record in a table.
key可以建立与识别不同tables之间的关联
primary key
定义:a column or group of columnns that uniquely identify every row in a table.
一个表只能有一个primary key
具体引申:
- 不存在两行有相同的主键值
- 每行必须有一个主键值
- 主键值不可为null
foreign key
定义: a column that establishes a relationship between two tables.
有点像table之间的交叉引用。
规则:
- 结构和数据类型必须和被引用的table primary key保持一致
- foreign key 中的value必须是primary key中出现的
- foreign key对应的column可以出现重复value
- foreign key 可以是Null
三、constraints
不同的关系模型约束有助于保证数据完整性。