Java基础88 数据库设计的三大范式
数据库的设计原则:建议设计的表尽量遵守三大范式
1、第一范式
要求表的每个字段必须是不可分割的独立单元
1 Student表: name -- 违反了第一范式 2 张三/二狗子
3 应改为: 4 Student表: name oldName -- 符合第一范式 5 张三 二狗子
解析:如上所示,当name这个字段有两种属性值的时候,就应当再加一个字段,将其分开
2、第二范式
在第一范式的基础上,要求每张表只表示一个意思,表的每个字段都和表的主键有依赖
1 Employee表:员工编号 员工姓名 部门编号 订单名称(应改为订单编号,且再加一张订单表) -- 符合第一范式,但违反了第二范式 2 3 应改为: 4 Employee表:员工编号 员工姓名 部门编号 订单编号 -- 符合第二范式 5 订单表:订单编号 订单名称
解析:如上所示,“员工编号”、“员工姓名”、“部门编号”可作为一张表,表示一个意思;“订单名称”也可作为一张表,表示另一个意思。且“员工姓名”、“部门编号”可依赖主键“员工编号”;“订单名称”应该再创建一张订单表,依赖于订单表的主键“订单编号”。
3、第三范式
在第二范式的基础上,要求每张表的主键之外的其他字段都只能和主键有直接决定依赖关系
1 Employee表:员工编号(主键) 员工姓名 部门编号 部门名称 -- 符合第二范式,但违反了第三范式(数据冗余高) [部门名称字段 数据冗余了] 2 3 应改为: 4 Employee表:员工编号(主键) 员工姓名 部门编号 -- 符合第三范式(降低数据冗余) 5 部门表:部门编号(主键) 部门名称
解析:如上所示,员工编号(主键)可直接决定“员工姓名”、“部门编号”,但 不能直接决定“部门名称”;否则就违反了第三范式(依赖关系重复了,且造成数据冗余),应该再创建一张部门表,由主键“部门编号”来决定“部门名称”
原创作者:DSHORE 作者主页:http://www.cnblogs.com/dshore123/ 原文出自:https://www.cnblogs.com/dshore123/p/10549839.html 欢迎转载,转载务必说明出处。(如果本文对您有帮助,可以点击一下右下角的 推荐,或评论,谢谢!) |