七、多表的数据库设计

不符合原子性的列需放入新的表

模式(SCHEMA): 用于表达数据库内的数据描述(包括列和表),以及任何相关对象和各种连接方式的描述。

一、外键

CREAT TABLE table_name_zibiao(

id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,

column name VARCHAR(30)  NOT NULL,

id_fubiao  INT NOT NULL,

CONSTRAINT table_name_fubiao_id_fubiao_fk

FOREIGN KEY(id_fubiao)      '此行括号内的列名代表外键,可随意命名

REFERENCES  table_name_fubiao (id_fubiao)

);

外键在DESC中的KEY为MUL,表示这列可以存储多个相同的值。

1. 定义和注意事项

定义:

把A表的主键值作为B表的一列,这种方式称为外键(foreign key);

外键引用到另一个表的主键;

2. 外键性质

① 外键使用的主键被称为父键,主键所在的表称为主表;

② 外键的值可以是NULL,即使主键值不可为NULL;此时表示在父表中没有相符的主键;

外键值不需唯一,它事实上通常都没有唯一性。

3. 外键约束

定义:

① 除非利用CREAT和INSERT语句制定外键,否则都不算是真的外键,创建在结构内的键被称作约束(constraint),即表必须遵守的规则;

② 插入外键列的值必须已经存在于父表的来源列中,这是引用完整性;

外键不一定必须是主表的主键,但必须有唯一性。


二、表间的关系

1. 表的对应模式

① 一对一模式

父表里的某条记录在字表里最多只能有一条相应的记录;

例如:如果员工信息表和工资表是2张表,主键和外键是工号,那么每一个主表里员工姓名只能在字表里找到一条工资记录(假设每个人工资都不相同)。

② 一对多模式

A表里的某一条记录B表中可以对应到多条记录,但B表中的每条记录只会对应到A表里相应的一条记录;

例如:如果员工信息表和ttle表是2张表,主键和外键是工号,那么每个title在员工信息表中可以找到多个人,但是每个员工在title表中只能找到1个title。

③ 多对多模式

A表里的某一条记录在B表中可以对应到多条记录B表中的一条记录也可以在A表里找到多条记录

例如:A表是每位女性的姓名,B表是销售的鞋子品种,那么每位女性会购买多双鞋,每种鞋可以被多位女性购买。

2. 连接表(junction table)

需要的原因:

如果没有连接表,在女士和鞋子的例子中,无论怎么排列,表中都会出现姓名或者鞋子重复出现的情况,所以多对多关的表之间需要一个连接表,从而把表的关系简化为一对多


三、第一、第二、第三范式

1. 第一范式,1NF

条件一:数据列只包含具有原子性的值;

条件二:没有重复的数据列。

2.各种概念

组合键:由多个数据列构成的主键,组合后各列形成具有唯一性的键,也可叫做主键列;O+π

部分函数依赖:非主键的列依赖于组合主键的某个部分(但不是完全依赖于组合主键),即此非主键列会根据主键列中某列改变而改变,但是不会因为主键列中另一列改变而改变

速记符号:T.x→T.y

在关系T中,y列函数依赖于x列;从右想左解读。

传递函数依赖:如果改变任何非键列可能造成其他非键列的改变,即为传递依赖

2. 第二范式,2NF

条件一:先符合1NF

条件二:没有部分函数依赖。

① 已经符合1NF的表如果只有一列主键,那么也会符合2NF;

② 只要所有的列都是主键的一部分或者表中有唯一主键列符合1NF的表,也会符合2NF;

③ 任何具有人工主键且没有组合主键的表都符合2NF。

3. 第三范式,3NF

条件一:符合2NF

条件二:没有传递函数依赖。

你可能感兴趣的:(七、多表的数据库设计)