【无标题】

数据库三大范式

第一范式(1NF)

每个表的每一个cell都是单独的值,不要出现多个值,其次不要重复出现意义相似的列。比如tags描述的是course的类型,一个课可能隶属于不同类,所以拎出来tags单独做表;同时一个类又可能有很多种课,这样courses和tags形成一种多对多的关系,这在数据库中是没有对应概念的(只有一对一一对多),所以用了个course_tags链接表将两者连接起来(enrollments实际上也起到了类似作用,用来表示学生注册课程)
【无标题】_第1张图片

第二范式(2NF)

第二范式要求在满足第一范式的条件下,还满足:
每张表都只有单一目的,仅代表一种实体类型,表的每一列都在描述这个实体(描述别的实体的列应当单独设计表,例如enrollments代表学生注册课程这个事情,那它不应该出现在students或者courses的表里)
所以原表设计有点问题,老师表应当单独设计,并且很有可能老师和课程之间也存在多对多的关系,需要链接表【无标题】_第2张图片

第三范式(3NF)

表要符合第二范式的前提下,就是说列之间的信息别有重复性,下面是俩例子
【无标题】_第3张图片
【无标题】_第4张图片

实用性建议

实际上,具体违反了第几范式并不重要,重要的是消除冗余,例如下面这个表,当你看见一列数据很多重复适合时候,很有可能是设计冗余了
【无标题】_第5张图片

你可能感兴趣的:(mysql,mysql,数据库)