「这是我参与2022首次更文挑战的第14天,活动详情查看:2022首次更文挑战」。
1. 级联
- 级联删除
在创建外键约束时可以添加ON DELETE CASCADE选项,那么当主表的数据被删除时,子表对应的行同样也自动被删除。
- 级联更新
在创建外键约束时可以添加ON DELETE SET NULL选项,那么当主表的数据被删除时,子表匹配的相关行的列会被设置为NULL值,而不是被删除。
2. 范式
- 第一范式:
对于表中的每一行,必须且仅仅有唯一的行值。在一行中的每一列仅有唯一的值并且具有原子性。
- 有主键(必须且仅仅有唯一的行值)
- 字段不可以再拆分(每一列仅有唯一的值并且具有原子性)
比如,联系方式:24040486@qq.com,18502999999 不符哈第一范式。因为联系方式可以拆分为Email和电话。并且具有两个值。
- 第二范式:
非主键列是主键的子集,非主键列活动必须完全依赖整个主键。
- 表不可以再拆分(表的原子性)
非主键列是主键的子集不相关的信息不要放到一张表,确保表中的每列都和主键相关。
错误示例:
| STU_ID | STU_NAME | STU_AGE | TEA_NAME | TEA_SEX |
|---|---|---|---|---|
| 1 | 张三 | 20 | 张老师 | 男 |
| 2 | 李四 | 20 | 张老师 | 男 |
| 3 | 王五 | 20 | 李老师 | 女 |
| 4 | 赵六 | 20 | 李老师 | 女 |
两处不合理:
- 教师跟学生是不相关的两种信息,不应放在一张表里
- 教师姓名和教师性别和学生存在传递关系,导致教师信息重复
拆分成两张表,满足第二范式后,区别一目了然:
| STU_ID | STU_NAME | STU_AGE | TEA_ID |
|---|---|---|---|
| 1 | 张三 | 20 | 1 |
| 2 | 李四 | 20 | 1 |
| 3 | 王五 | 20 | 2 |
| 4 | 赵六 | 20 | 2 |
| TEA_ID | TEA_NAME | TEA_SEX |
|---|---|---|
| 1 | 张老师 | 男 |
| 2 | 李老师 | 女 |
- 第三范式:
非主键列互不依赖
例如:
| STU_ID | STU_NAME | STU_SCORE | SCORE_LEVEL |
|---|---|---|---|
| 1 | 张三 | 100 | 优秀 |
| 2 | 李四 | 80 | 良好 |
| 3 | 王五 | 80 | 良好 |
| 4 | 赵六 | 60 | 及格 |
分数和等级都是非主属性,但确产生了依赖。
消除依赖:
| STU_ID | STU_NAME | STU_SCORE | SCORE_LEVEL |
|---|---|---|---|
| 1 | 张三 | 100 | 1 |
| 2 | 李四 | 80 | 2 |
| 3 | 王五 | 80 | 2 |
| 4 | 赵六 | 60 | 3 |
| LEVEL_ID | SCORE_LEVEL |
|---|---|
| 1 | 优秀 |
| 2 | 良好 |
| 3 | 及格 |
| 4 | 不及格 |