数据库相关笔记

关系型数据库设计

六大范式

第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、
第四范式(4NF)和第五范式(5NF,又称完美范式)。

第一范式

    数据库表的每一列都是不可分割的原子数据项,而不是数组、集合。即实体中的某个属性有多值
时,必须拆分为不同的属性。在符合第一范式(1NF)表中的每个域值只能是实体的一个属性或一个
属性的一部分。简而言之,第一范式就是无重复的域。

第二范式

    建立在第一范式的基础上,第二范式要求数据库表中的每个实例或记录必需可以被唯一的区分
选取一个能区分每个实体的属性或属性组作为实体的唯一标识,例如在员工表中的身份证号码即可实
现每个一员工的区分,该身份证号码即为候选键,任何一个候选键都可以被选作主键。(该主键的添
加是在ER设计时添加,不是建库时随意添加)   

第二范式要求属性完全依赖于主关键字,而不能存在任何一列和主键没有关系

第三范式

    第三范式(3NF)是第二范式(2NF)的一个子集,即满足第三范式(3NF)必须满足第二范式
(2NF)。简而言之,第三范式(3NF)要求一个关系中不包含已在其它关系已包含的非主关键字信
息。例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信
息。那么在员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入
员工信息表中。

第三范式要求表中的每一列都要与主键直接关联,而不是间接关联

什么是主键

在一张表中,用来唯一标识一条记录的字段集,叫做主关键字或者主关键码,简称主键(或主码),
这里说"字段集"是因为主键可能用一个字段或者多个字段来表示

什么是外键

    一张表的非主属性是另一个表的主属性就是这个表的外键。这里有两个分别为: 学生表(学
号, 姓名, 性别,专业编号),专业信息表(专业编号,专业名称,专业备注信息)。学生表
中主键是学号,专业信息表中主键是专业编号。学生表中的非主属性专业编号恰好是专业信息表中的
主键。我们就称这个专业编号是学生表的外键。像这样,一个表的非主属性是另一个表的主属性,该
非主属性就是外键。

父表和子表

    有两张表,一张表中的外键是另一张表的主键时,外键的那张表称之为字表,另一张表就是父
表,以上面的学生表和专业信息表为例,学生表的外键专业编号是专业信息表的主键,那么学生表
是字表,专业信息表是父表。

应用实例

学生系统的设计

确定要设计的内容

  • 学生有那些基本信息?
  • 学生选了那些课,成绩是什么?
  • 每个课的学分是多少?
  • 学生属于那个系,系的基本信息是什么?

首先先把所有属性放在一张表中,看有什么结果

(学号,学生姓名、年龄、性别、课程、课程学分、系别、学科成绩,系办地址、系办电话)

(学号, 课程名称) → (姓名, 年龄, 成绩, 学分)

不符合第二范式的要求
    数据冗余
    数据修改困难

解决:

设计四张表:
  • 学生信息表(学号,姓名,年龄,性别,系别);
  • 课程表 (课程名称,学分)
  • 选课关系表 (学号,课程名称,成绩)
  • 系别关系表(系别,系办地址、系办电话)。

数据库约束

五大约束:

  • 主键约束(Primay Key Coustraint) 唯一性,非空性;
  • 唯一约束 (Unique Counstraint)唯一性,可以空,但只能有一个
  • 默认约束 (Default Counstraint) 该数据的默认值;
  • 外键约束 (Foreign Key Counstraint) 需要建立两表间的关系;
  • 非空约束(Not Null Counstraint):设置非空约束,该字段不能为空。

猜你喜欢

转载自blog.csdn.net/swollow_/article/details/79754086