不符合原子性的列需放入新的表
模式(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;
条件二:没有传递函数依赖。