Recall:

数据库中的一些术语:(后面的中文可能翻译不准确,我自己这么称呼它们)
relation —— 关系模型
tuple entity —— 表中的一条 记录 ,也成为 实体
attribute/column —— 每个表头即 属性
domain —— 属性的取值域
FD(functional dependency) —— 函数依赖
MVD(Multi-Valued Dependency) —— 多值依赖。。这个真不知道该怎么翻译

Normalization of Database

数据库正规化是数据库中如何合理且有效组织数据的一门技术,它也为我们提供了一套系统地消除数据 冗余(redundancy) 异常(anomaly) 的方法。

正规化主要就是两个目的:

  • 消除数据冗余(或者说没意义的数据)
  • 确保数据之间的依赖关系是合乎逻辑的

Problems Without Normalization

假如在设计数据库关系的时候没考虑正规化,不仅会因为数据间的冗余从而浪费存储空间,同时,它也会给我们更新、删除数据时带来很多麻烦,也就是上面说到的异常,下面举例说明。
在这里插入图片描述

表头分别是学生id,学生姓名,学生具体的专业方向,hod(Head of Department) 学院的领导,办公电话。

假如来了个新生,他还没细分具体专业方向,于是乎在后三栏我们就没办法添了,只能用NULL来补充了,这样就很不方便了;相反,假如软件工程专业有50个学生,那么这50个学生的后三栏就会重复,但我们不得不重复地插入。

好,假如某天Mr. X不当领导了,然后换了个领导Mr. Y,那么每个学生都需要将他的hod改成Mr. Y了。万一数据库管理员不小心漏了几个同学的没改,那这些学生的学籍就有错误了。

也许你会说:哎呀,那你管理员细心一点不就好了?

那我会说:你为什么不可以换一种设计数据表的方式呢?

再假设,某个branch只有一个学生(好像不太可能),有一天,这个学生真的太孤单了,他读不下去了,转去学管理了,很显然就要把他的信息删掉,问题就来了。因为我们的学生信息和专业的信息是绑在一起的,你删了这个唯一的同学,那这个专业、专业领导也被你删掉了,这样就有问题了。

正规化的规则

主要分为以下几种(越往后,要求越严格):

  • First Normal Form
  • Second Normal Form
  • Third Normal Form
  • BCNF(Boyce-Codd Normal Form)
  • Fourth Normal Form

First Normal Form (1NF) 详细介绍1NF

如果一个表是满足一范式的,那么它需要满足以下条件:

  1. 每个属性的取值必须是原子的 atomic
  2. 每一列的 domain 必须是一样的
  3. 不存在相同的列名
  4. 列的排列顺序,以及每个tuple间的排列顺序可以交换。

Second Normal Form (2NF) 详细介绍2NF

如果一个表是满足二范式的,那么它需要满足以下条件:

  1. 它必须是满足一范式的
  2. 它不含有部分依赖(Partial Dependency)

Third Normal Form (3NF) 详细介绍3NF

如果一个表是满足三范式的,那么它需要满足以下条件:

  1. 它必须是满足二范式的
  2. 它不含有传递依赖(TransitiveDependency)

Boyce and Codd Normal Form (BCNF) 详细介绍BCNF

BCNF其实是第三范式的更高约束版本,它可以处理一些3NF处理不了的异常
如果一个表是满足BCNF的,那么它需要满足以下条件:

  1. 它必须是满足三范式的
  2. 对任意一个FD ( X → Y ), X应该是个 超键(superkey) .

Fourth Normal Form (4NF) 详细介绍4NF

如果一个表是满足三范式的,那么它需要满足以下条件:

  1. 它必须是满足BCNF的
  2. 它不含有多值依赖( Multi-Valued Dependency.)

后面会持续更新。

Recall:数据库中的一些术语:(后面的中文可能翻译不准确,我自己这么称呼它们)relation —— 关系模型tuple entity—— 表中的一条记录,也成为实体attribute/column —— 每个表头即属性domain —— 属性的取值域FD(functional dependency)—— 函数依赖MVD(Multi-Valued Dependency) —— 多...
Codd博士定义了6个范式来规范化 数据库 ,范式由小到大来约束,范式越高冗余越小,但表的个数也越多。实验证明,三范式是性价比最高的。 2.1 第一范式:确保每列原子性 第一范式确保每个字段不可再分 如下表设计是否合理? 不合理。不满足第一范式,上课时间可以再分 地址包含省、市、县、地区是否需要拆分? 如果仅仅起地址的作用,不需要统计,可以不拆分;如果有按地区统计的功能需要拆分。 2.2 第二范...
推荐个在线SQL网站:http://sqlfiddle.com/,满足个人即时学习需要,避免安装 数据库 实例的麻烦。 参考资料:Wiki百科、百度百科、Google、博客园等,定义性的内容,直接引用了官方介绍。 本文参照以下目录进行内容组织: 什么是好的 数据库 设计? 函数依赖理论 函数依赖的定义 完全函数依赖与部分函数依赖 传递函数依赖 关系模型的分解特性 模式分解存在的问题...
范式(Normal Form):一、无范式(Unnormalized Form,UNF)二、第一范式(First Normal Form,1NF)三、第二范式(2NF)函数依赖(Functional Dependency)完全函数依赖(full functional dependency)部分函数依赖(partial dependency)四、第三范式(3NF)传递性依赖(transitive dependency)。 写下此文,希望能深入浅出地总结【正则化】的要点.....................
码和属性的关系 f(X)→Yf(X)\rightarrow Yf(X)→Y,则YYY函数依赖于XXX。理解为知道XXX后,就可以推出YYY;而且,能且仅能推出唯一的YYY。这类似于数学上的函数。 平凡函数依赖:X→YX \rightarrow YX→Y,同时Y∈XY \in XY∈X,则是平凡函数依赖。 非平凡函数依赖:X→FYX \xrightarrow{F} YXF​Y,同时Y∉XY...
① ε是一个正规式,它表示集合L(ε)={ε}。 ② 若a是∑上的字符,则a是一个正规式,它所表示的正规集L(a)={a}。 ③ 若正规式r和s分别表示正规集L(r )、L(s),则 (a)r|s是正规式,表示集合L( r)∪L(s); (b)r·s是正规式,表示集合L( r)L(s); (c)r* 是正规式,表示集合 (L(r ) ) * ; (d)( r)是正规式,表示集合L( r)。 仅由有限次地使用上述三个步骤定义 Prolog中的 数据库 规范化 该脚本实现了两种最常用的 数据库 规范化算法:BCNF分解和3NF合成。 它是在 数据库 课程中学习考试时作为练习而编写的。 norm_example谓词对Kifer,Bernstein和Lewis教科书“ 数据库 系统”中给出的示例 数据库 进行规范化。 输出示例: $ ./norm.pl # BCNF Decomposition - Schema: `[[a,d,e],[a,f,h],[b,c,f,g]]` - Dependencies: `[ ([a]->[d,e]), ([b,h]->[c,f,g]), ([f]->[a,h])]` - Decomposition: [a,b,c,d,e,f,g,h] ├── violation: [a]->[d,e] ├── [a,d,e] └── [a,b,c,f,g,h] ├── violatio
conditional_batch_ normalization 有条件批处理规范化Pytorch的实现 这是在[1]和[2]中引入的有条件批处理归一化,并在[3]中成功地应用于有条件的图像生成。 [1] Dumoulin,Vincent,Jonathon Shlens和Manjunath Kudlur。 “艺术风格的博学代表。” CoRR,abs / 1610.07629 2.4(2016):5。 [2] De Vries,Harm等人。 “通过语言来调节早期的视觉处理。” 神经信息处理系统的进展。 2017。 [3] Miyato,Takeru和Masanori Koyama。 “带有投射识别器的cGAN。” arXiv预印本arXiv:1802.05637(2018)。
第一范式1NF: 表的列都是原子的 不能某一列可以被拆分成几个列(如定义购物车一列,内容为苹果一只,香蕉一斤, 不如分解为产品,数量两列,分别填上苹果, 1, 香蕉 2) 第二范式2NF:非键列不能部分依赖于部分键列(必须依赖于整个键) 如果非键列依赖于部分键,那这些非键列一定由于部分依赖而产生冗余,此时就应该把这些非键列和部分键取出来重新建一个表 非键列必须完全函数依赖于整个...
视频异常事件检测Object-centric Auto-encoders and Dummy Anomalies for Abnormal Event Detection in Video swift_wings: https://github.com/fjchange/object_centric_VAD (转)c++文件操作详解 嗯,还是你写的*p++和*++p厉害 (转)c++文件操作详解 Romml: 差分自编码器介绍、推导及实现 苏世独立、横而不流: 博主太强了,这篇文章写的非常好,逻辑推理清晰,资料文献引用合理准确。 表情包