📅  最后修改于: 2023-12-03 15:29:39.859000             🧑  作者: Mango
BOYCE CODD范式是关系型数据库设计的重要原理之一,它是由计算机科学家E.F. Codd提出的,以其名字命名,通常简称为BC范式。BC范式是一种最高级别的范式,要求关系模式满足某些特定的条件,保证了数据库结构的简洁性、一致性和可靠性。本文将为程序员们介绍一些BC范式常用的格式问题。
第一范式(1NF)指关系模式的每一个属性都是不可分解的,也就是说每个属性都是最基本的数据单元。具体来说,满足1NF的关系模式应该不包含重复的属性和不可分解的属性集。
| 学号 | 学生姓名 | 联系方式 | | ------ | ---------- | ---------------- | | 10001 | 张三 | zhangsan@163.com | | 10001 | 张三 | 12345678901 | | 10002 | 李四 | lisi@163.com | | 10002 | 李四 | 12345678902 | | 10003 | 王五 | wangwu@163.com | | 10003 | 王五 | 12345678903 |
上图中,每个学生包含两个联系方式,违反了1NF。
| 学号 | 学生姓名 | 邮箱 | 电话 | | ------ | -------- | ---------------- | ------------- | | 10001 | 张三 | zhangsan@163.com | 12345678901 | | 10002 | 李四 | lisi@163.com | 12345678902 | | 10003 | 王五 | wangwu@163.com | 12345678903 |
将每个不可分属性拆分为独立属性,构建一个新的关系模式。
第二范式(2NF)指关系模式应该满足第一范式,同时非主键属性完全依赖于候选关键字(主键),也就是说中间不应该存在任何冗余数据。也就是说,如果某一属性只依赖部分主键,则需要将该属性单独作为一个新的表,以此消除冗余的数据。
| 订单号 | 商品名 | 数量 | 仓库ID | 仓库地址 | | ------ | ------------- | ------ | ------ | -------------- | | 1 | 可乐 | 2 | 1 | 北京市海淀区 | | 1 | 可乐 | 2 | 2 | 北京市西城区 | | 2 | 大白菜 | 5 | 1 | 北京市海淀区 |
在上述的订单表中,订单号和仓库ID构成了主键,商品名、数量、仓库地址等属性与主键没有完全关联。而仓库地址可以由仓库ID唯一确定,也就是说存在冗余数据。
将订单信息拆分为'订单详情'和'仓库信息'两个独立的表。
| 订单号 | 商品名 | 数量 | | ------ | ------ | ---- | | 1 | 可乐 | 2 | | 2 | 大白菜 | 5 |
| 仓库ID | 仓库地址 | | ------ | ------------ | | 1 | 北京市海淀区 | | 2 | 北京市西城区 |
将非主键属性单独作为一个新表,以此消除数据冗余。
第三范式(3NF)指关系模式应该满足第二范式,并且不存在传递依赖,也就是说任何非主属性都不能依赖于其他非主属性。
| 员工ID | 员工姓名 | 所属部门 | 上级领导 | 部门地址 | | ------ | -------- | -------- | -------- | ----------- | | 1 | 张三 | 人事部 | 李四 | 北京市海淀区 | | 2 | 李四 | 研发部 | 王五 | 上海市浦东区 | | 3 | 王五 | 财务部 | NULL | 北京市丰台区 |
在上图中,部门地址与'所属部门'属性相关联,而'所属部门'与'员工ID'属性相关联,因此部门地址依赖于员工ID,存在数据冗余。
将部门相关信息单独作为一个新表,分别与员工和公司建立联系。
| 员工ID | 员工姓名 | 所属部门 | 上级领导 | | ------ | -------- | -------- | -------- | | 1 | 张三 | 1 | 2 | | 2 | 李四 | 2 | 3 | | 3 | 王五 | 3 | NULL |
| 部门ID | 部门名称 | 公司名称 | 地址 | | ------ | -------- | ------------ | --------------- | | 1 | 人事部 | ABC公司 | 北京市海淀区 | | 2 | 研发部 | ABC公司 | 北京市海淀区 | | 3 | 财务部 | XYZ公司 | 上海市浦东新区 |
将多对一和多对多关系单独作为一个新表,并通过主键和外键建立关联。
BC范式是关系型数据库设计的一种规范,它可以保证数据库结构的简洁性、一致性和可靠性。在设计数据库模式时,需要将每个属性拆分为最基本的数据单元,并通过BC范式的要求对其进行调整。BC范式可以分为1NF、2NF和3NF三个等级,每个等级的范式都有其独特的标准和解决方案,需要根据实际情况进行选择。