BCNF/3NF 数据库设计范式简介
数据库设计有1NF、2NF、3NF、BCNF、4NF、5NF。从左往右,越后面的数据库设计范式冗余度越低。
满足后一个设计范式也必定满足前一个设计范式。
1NF只要求每个属性是不可再分的,基本每个数据库都会满足。
2NF要求每个联系都满足完全依赖,不能存在部分决定(partial dependency)。
例如,某关系R有6个属性:ABCDEG,满足的函数依赖(functional dependency)为:
F = {A->B, B->C, AD->G, D->E}
可以看出,其主键(Primary Key)为{A,D}
由于函数依赖A->B, B->C, D->E的左边不是完整的AD, 故它违背了完全依赖的要求,没有达到2NF的设计要求
3NF与BCNF很接近,设计要求比BCNF略微宽松,故先来探讨BCNF
BCNF的口号是:对每个函数依赖(FD),左边都要是超码(Superkey),
其具体定义为:
如果As->Bs是R中一个非平凡的函数依赖,那么As是R的一个超码。
其中,非平凡是指:Bs不是As的子集
3NF比BCNF要求宽松一点,即:
如果As->Bs是R中一个非平凡的函数依赖,那么As是R的一个超码, 或者Bs是主键(Primary Key)的一部分。
一般而言,数据库设计达到BCNF/3NF,就已经足够了。
选择达到3NF或者BCNF往往是一个权衡的过程,3NF存在冗余,但能够避免FD的丢失;
BCNF冗余更低,但可能造成FD的丢失。其中FD的丢失指将新得到的表合并后,会比原来的表多出来一些本来不存在的信息。
BCNF/3NF 数据库设计范式简介的更多相关文章
- Oracle笔记(十六) 数据库设计范式
数据库设计范式是一个很重要的概念,但是这个重要程度只适合于参考.使用数据库设计范式,可以让数据表更好的进行数据的保存,因为再合理的设计,如果数据量一大也肯定会存在性能上的问题.所以在开发之中,唯一可以 ...
- 数据库设计范式2——BC范式和第四范式
我在很久之前的一篇文章中介绍了数据库模型设计中的基本三范式,今天,我来说一说更高级的BC范式和第四范式. 回顾 我用大白话来回顾一下什么是三范式: 第一范式:每个表应该有唯一标识每一行的主键. 第二范 ...
- 数据库设计范式1——三范式
一讲到数据库设计,大家很容易想到的就是三范式,但是第四.第五范式又是什么,不是很清楚,三范式到底怎么区分,也不清楚,作为数据库设计的基础概念,我再讲解下数据库范式. Normal form Bri ...
- 【HCIA Gauss】学习汇总-数据库管理(数据库设计 范式 索引 分区)-7
zsql user/pasword@ip:port -c "show databases" # 展示一条sql语句 spool file_path 指定输出文件 可以为相对路径 s ...
- [MySQL] 关系型数据库的设计范式 1NF 2NF 3NF BCNF
一.缘由: 要做好DBA,就要更好地理解数据库设计范式.数据库范式总结概览: 为了更好地理解数据库的设计范式,这里借用一下知乎刘慰老师的解释,很通俗易懂.非常感谢! 二.具体说明: 首先要明白”范 ...
- MySQL 数据库设计 笔记与总结(2)逻辑设计
[实例演示 —— 实体之间的关系] [逻辑设计的工作] ① 将需求转化为数据库的逻辑模型 ② 通过 ER 图的形式对逻辑模型进行展示 ③ 同所选用的具体的 DBMS 系统无关 [名词解释] 候选码可以 ...
- Oracle数据库设计第三范式
一.数据库设计范式及其意义和不足 数据库的设计范式是数据库设计所需要满足的规范,数据库的规范化是优化表的结构和优化把数据组织到表中的方式,这样使数据更明确,更简洁.实践中,通常把一个数据库分成两个或多 ...
- 【SQL数据库设计】数据库设计【小型数据库】
数据库设计 需求 表结构 字段类型.是否允许为null.是否有默认值 索引设计 数据库引擎的选择 根据产品原型分析,词性分析法,名词创建表或字段,动词表示关系. 数据存储:长期存储的数据, 1.主键: ...
- 数据库的范式(1NF、2NF、3NF、BCNF)转载
文章属于转载:https://www.cnblogs.com/hi-bazinga/archive/2012/06/05/2536806.html 第一范式:关系模式中,每个属性不可再分.属性原子性第 ...
随机推荐
- 渗透神器CobaltStrike 3.1.2 去后门破解版 & Windows版TeamServer【转】
转自我八师傅博客 CS简介 Cobalt Strike(简称CS)是全球黑客公认一款非常优秀的渗透测试神器,以metasploit为基础的GUI的框架式渗透工具,集成了传统远控功能(远程桌面VNC.键 ...
- MySQL5.5配置文件my.ini详解
[client]port = 3306 [mysqld]port = 3306 ##安装目录 basedir="C:/Program Files (x86)/MySQL/MySQL Serv ...
- centos 7 安装 Oracle 12c
#!/bin/bash #!/usr/bin/expect -f #/etc/sysctl.conf --bash-srcipts-- echo 'net.ipv6.conf.all.disable_ ...
- zabbix分布式部署和主机自动发现
1.分布式部署原理 1.1Zabbix分布式部署的原理 传统的部署架构,是server直接监控所有的主机,全部主机的数据都是有server自己来采集和处理,server端的压力比较大,当监控主机数量很 ...
- Linux 查看主机、CPU、内存、内核、网卡或MAC地址、关机、重启、当前使用人、网络连接状态、主机目前使用状态
7 uname -a 显示主机名.内核.硬件结构等全部信息 unmae -r 只显示内核 查看Redhat和centos的内核版本也可以用cat /etc/redhat-release 或cat /e ...
- The Multilinear Structure of ReLU Networks
两种非常常见的非线性单元:rectified linear units (ReLUs) 和 leaky ReLUs 我们选取binary hinge loss进行二分类 对于多分类,我们可以定义mul ...
- grunt-contrib-jshint js代码检查
grunt-contrib-jshint:用于javascript代码检查(并会给出建议),发布js代码前执行jshint任务, 可以避免出现一些低级语法问题jshint拥有非常丰富的配置,可以自由控 ...
- Qt5多线程
方法一:重写run函数 一.线程执行过程: 1.在工程中自定义一个类mythread继承与QThread: 2.重写run函数: 3.创建线程对象: 4.写按钮槽函数: ui界面加入一个按钮 给按钮添 ...
- 23.git简单使用
git:我主要是为了收集命令,学习请去看廖雪峰的博客,内容很详细 git客户端下载: Git是GitHub开源社区的版本管理系统: 下载地址:https://git-scm.com/download/ ...
- 论文阅读:OpenFlow: Enabling Innovation in Campus Networks
摘要: 本白皮书提出了OpenFlow——研究人员在他们每天使用的网络中运行实验协议的一种方式. OpenFlow基于以太网交换机,具有内部流表以及用于添加和删除流条目的标准化接口.我们的目标是鼓励网 ...