暑期自学 Day 12 | 数据库 (五)- 多表,数据库设计

多表关系

  • 一对一:人和身份证
  • 一对多:部门和员工:一个部门,多个员工
  • 多对多:学生和课程

一对一

  • 可以在任一方添加唯一外键指向另一方主键
  • 一般一对一关系合并成一张表

一对多

  • 建立关联:在多的一方建立外键,指向一的一方的主键
  • 如:在员工表建立外键,指向部门的主键

多对多

  • 建立关联:需要中间表,中间表至少包含两个字段–两张表的主键。中间表的联合主键需要唯一。
  • 一个例子:
    # 中间表
    CREATE TABLE middle (
      rid INT, -- 表一主键
      uid INT, -- 表二主键
      PRIMARY KEY (rid, uid), -- 联合主键
      FOREIGN KEY (rid) REFERNCE user(uid),
      FOREIGN KEY (uid) REFERNCE route(rid)
    );

数据库设计范式

遵从后面的范式要求,必须先遵从前面的范式要求。

第一范式

每一列都是不可分割的原子数据项。
就是说不能有某一列还包含一个或者多个子列。

第二范式

第一范式基础上,非码属性必须完全依赖于候选码(消除第一范式基础上的部分依赖)

  • 函数依赖:通过A属性或(A1,A2)属性组的值可以确定B属性的值,A->B。
    • 学号->姓名,(学号,课程)->成绩
  • 完全函数依赖:确定B属性的值需要依赖于A属性组中所有属性的值。
    • (学号,课程)->成绩
  • 部分函数依赖:确定B属性的值只需要依赖于A属性组中某一些属性的值。
    • (学号,课程)->姓名
  • 传递函数依赖:A->B,B->C.
    • 学号->系名->系主任
  • 码:一个属性或者主属性被其他所有属性完全依赖。
    • 主属性:码的属性组中的属性
    • 非主属性:除了码之外的所有属性

第三范式

任何非主属性不依赖于其他非主属性

  • 如:”学号,姓名,系,系主任” 表中,系主任依赖于系名,而系和系主任在这个表中都是非主属性,所以这个表的设计不合理。
本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!