数据库中的一些术语:(后面的中文可能翻译不准确,我自己这么称呼它们)
relation
——
关系模型
tuple
entity
—— 表中的一条
记录
,也成为
实体
attribute/column
—— 每个表头即
属性
domain
—— 属性的取值域
FD(functional dependency)
—— 函数依赖
MVD(Multi-Valued Dependency)
—— 多值依赖。。这个真不知道该怎么翻译
数据库正规化是数据库中如何合理且有效组织数据的一门技术,它也为我们提供了一套系统地消除数据
冗余(redundancy)
和
异常(anomaly)
的方法。
正规化主要就是两个目的:
-
消除数据冗余(或者说没意义的数据)
-
确保数据之间的依赖关系是合乎逻辑的
假如在设计数据库关系的时候没考虑正规化,不仅会因为数据间的冗余从而浪费存储空间,同时,它也会给我们更新、删除数据时带来很多麻烦,也就是上面说到的异常,下面举例说明。
表头分别是学生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
如果一个表是满足一范式的,那么它需要满足以下条件:
-
每个属性的取值必须是原子的
atomic
-
每一列的
domain
必须是一样的
-
不存在相同的列名
-
列的排列顺序,以及每个tuple间的排列顺序可以交换。
如果一个表是满足二范式的,那么它需要满足以下条件:
-
它必须是满足一范式的
-
它不含有部分依赖(Partial Dependency)
如果一个表是满足三范式的,那么它需要满足以下条件:
-
它必须是满足二范式的
-
它不含有传递依赖(TransitiveDependency)
BCNF其实是第三范式的更高约束版本,它可以处理一些3NF处理不了的异常
如果一个表是满足BCNF的,那么它需要满足以下条件:
-
它必须是满足三范式的
-
对任意一个FD ( X → Y ), X应该是个
超键(superkey)
.
如果一个表是满足三范式的,那么它需要满足以下条件:
-
它必须是满足BCNF的
-
它不含有多值依赖( 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} YXFY,同时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:
(转)c++文件操作详解
(转)c++文件操作详解
Romml:
差分自编码器介绍、推导及实现
苏世独立、横而不流: