Oracle数据库的应用,数据库三大范式

127 阅读2分钟

「这是我参与2022首次更文挑战的第14天,活动详情查看:2022首次更文挑战」。

1. 级联

  • 级联删除

在创建外键约束时可以添加ON DELETE CASCADE选项,那么当主表的数据被删除时,子表对应的行同样也自动被删除。

  • 级联更新

在创建外键约束时可以添加ON DELETE SET NULL选项,那么当主表的数据被删除时,子表匹配的相关行的列会被设置为NULL值,而不是被删除。

2. 范式

  • 第一范式:

对于表中的每一行,必须且仅仅有唯一的行值。在一行中的每一列仅有唯一的值并且具有原子性。

  • 有主键(必须且仅仅有唯一的行值)
  • 字段不可以再拆分(每一列仅有唯一的值并且具有原子性)

比如,联系方式:24040486@qq.com,18502999999 不符哈第一范式。因为联系方式可以拆分为Email和电话。并且具有两个值。

  • 第二范式:

非主键列是主键的子集,非主键列活动必须完全依赖整个主键。

  • 表不可以再拆分(表的原子性)

非主键列是主键的子集不相关的信息不要放到一张表,确保表中的每列都和主键相关。

错误示例:

STU_IDSTU_NAMESTU_AGETEA_NAMETEA_SEX
1张三20张老师
2李四20张老师
3王五20李老师
4赵六20李老师

两处不合理:

  • 教师跟学生是不相关的两种信息,不应放在一张表里
  • 教师姓名和教师性别和学生存在传递关系,导致教师信息重复

拆分成两张表,满足第二范式后,区别一目了然:

STU_IDSTU_NAMESTU_AGETEA_ID
1张三201
2李四201
3王五202
4赵六202
TEA_IDTEA_NAMETEA_SEX
1张老师
2李老师
  • 第三范式:

非主键列互不依赖

例如:

STU_IDSTU_NAMESTU_SCORESCORE_LEVEL
1张三100优秀
2李四80良好
3王五80良好
4赵六60及格

分数和等级都是非主属性,但确产生了依赖。

消除依赖:

STU_IDSTU_NAMESTU_SCORESCORE_LEVEL
1张三1001
2李四802
3王五802
4赵六603
LEVEL_IDSCORE_LEVEL
1优秀
2良好
3及格
4不及格