【MySQL】数据库设计(一)三大范式
三大范式
1NF 第一范式
强调列的原子性,即列不可分
例如:
2NF 第二范式
前提是1NF,另外包含两个部分:
-
表必须具有一个主键;
-
没有包含在主键中的列必须完全依赖于主键,而不是只依赖主键的一部分;主键有多个列判断
例如:
上述表中,表(1)不能由单独的OederID(订单号)或者ProductID(商品名)来唯一区分每条记录(因为买同一个商品的人有很多,同一订单号下有很多商品),也就是可以由多个主键确定一个记录。但是除了主键之外的字段仅部分依赖主键,这就不符合要求(比如洗发水以及其价格可以由商品名直接确定,不用订单号)。
修改后得到表(2)就符合所有字段直接依赖主键的要求。
3NF 第三范式
前提是2NF, 非主键列必须直接依赖于主键。
不能存在传递依赖,既不能存在:非主键列A依赖于非主键列B,非主键列B依赖于主键的情况。
例如:
在这里,如果按表(1)的设计,用户修改信息之后会出现很多重复的表。因此要拆分。
最终结构关系:
层层关联即为关系型数据库