数据库设计

第一范式:消除组中的重复,也就是说列中是否存储了其他列中的信息
第二范式:消除部分依赖列,也就是说是否有依赖于一部分主键的列
第三范式:消除非依赖列,是否有依赖于非主键的列

例如:

学生信息表

学生ID,姓名,地址,城市,邮政编码,所在年级,性别,参加课程,课程级别,课程ID,名称,描述,教师ID,教

师姓名,时间表,地点,先决课程

如果这么多字段在同一个表里,那么这种设计会被认为没有正规化,这里有很多重复的信息,为了把数据库设计转化

为第一范式,需要把信息分成两个表,并在两个表之间建立关系,如下:

学生表
学生ID,姓名,地址,城市,邮政编码,所在年级,性别

学生课程表
学生ID,课程ID,名称,描述,教师ID,教师姓名,时间表,地点


通过把学生从课程中分离,我们可以消除由不同的逻辑组引入的重复,我们必须满足消除信息重复的目标。接下来,

从第一范式到第二范式,我们需要消除表中仅仅部分依赖主键的列,这些列应该被分割到不同的表中。在学生课程表

中,许多列仅仅依赖于课程ID,而不依赖于学生ID,这个表的主键是学生ID+课程ID,因此把这个表分成两个表,如下



学生课程表
学生ID,课程ID,课程级别


课程表
课程ID,名称,描述,教师ID,教师姓名,先决课程,时间表,地点

既然对主键的部分依赖已经消除,数据库就已经满足第二范式了。为了进一步把数据库转化为第三范式,需要把表中

对构成主键的列的不依赖部分分离出去,教师姓名依赖于教师ID,而不依赖于课程ID,索引,这些列应该被分离以形

成一个新表,如下:

教师表
教师ID,教师姓名

最终的课程表如下
课程ID,名称,描述,教师ID,时间表,地点

一旦所有的数据库的设计依赖性都被消除,也就满足了第三范式。


不一定每种数据库设计都要达到第三范式,因为达到第三范式在查询的时候进行大量的连接操作,所以要针对你的情况设计你的数据库。

都是我一个字一个字敲的,好累,希望对你有些帮助,;)

你可能感兴趣的:(数据库设计)