前序
这是面向后端开发者的SQL数据库知识的一次总结。由于本人目前正在找工作,所以边学边做笔记,以便日后复习使用。
SQL数据库即结构化查询语言数据库(关系数据库)。名字就说明了要学习的内容的两个特点:1、操作数据库的语言;2、语言的操作对象。在我个人看来了解语言的操作对象要必了解语言更加首(先)(重)要。我对数据库的学习就是以数据库为核心,语言为辅助进行的。
构建关系数据库——范式的理解应用
关系数据库是创建在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示(维基百科)。由定义可知关系模型是关系数据库的核心所在。所以要构建关系数据库首先先要了解关系模型的基本概念。这里借用刘慰老师在知乎上的讲解内容做一次笔记以便日后复习,刘慰老师原文内容严谨思路清晰大家可从中获取真知灼见。原著给您指路如何解释关系数据库的第一第二第三范式?。
码设 K 为某表中的一个属性或属性组,若除 K 之外的所有属性都完全函数依赖于 K(这个“完全”不要漏了),那么我们称 K 为候选码,简称为码。在实际中我们通常可以理解为:假如当 K 确定的情况下,该表除 K 之外的所有属性的值也就随之确定,那么 K 就是码。一张表中可以有超过一个码。(实际应用中为了方便,通常选择其中的一个码作为主码)
主属性包含在任何一个码中的属性成为主属性。
非主属性不是主属性的即为非主属性
函数依赖我们可以这么理解(但并不是特别严格的定义):若在一张表中,在属性(或属性组)X的值确定的情况下,必定能确定属性
Y
Y
Y的值,那么就可以说
Y
Y
Y函数依赖于
X
X
X,写作
X
→
Y
X → Y
X→Y。也就是说,在数据表中,不存在任意两条记录,它们在
X
X
X属性(或属性组)上的值相同,而在
Y
Y
Y属性上的值不同。这也就是“函数依赖”名字的由来,类似于函数关系$ y = f(x)
,
在
,在
,在x
的
值
确
定
的
情
况
下
,
的值确定的情况下,
的值确定的情况下,y$的值一定是确定的。说白了就是函数关系。
完全函数依赖在一张表中,若
X
→
Y
X → Y
X→Y,且对于
X
X
X的任何一个真子集(假如属性组
X
X
X 包含超过一个属性的话),
X
′
→
Y
X ' → Y
X′→Y 不成立,那么我们称
Y
Y
Y对于
X
X
X完全函数依赖,记作
X
⟶
F
Y
X\stackrel{F}{\longrightarrow}Y
X⟶FY。说白了就是函数关系的完全映射。即自变量必须在其完整集合中取值才能取遍因变量集合内所有值。
部分函数依赖假如
Y
Y
Y函数依赖于
X
X
X,但同时
Y
Y
Y并不完全函数依赖于
X
X
X,那么我们就称
Y
Y
Y部分函数依赖于
X
X
X,记作
X
⟶
P
Y
X\stackrel{P}{\longrightarrow}Y
X⟶PY即非完全映射关系。
传递函数依赖假如
Z
Z
Z函数依赖于
Y
Y
Y,
Y
r
i
g
h
t
a
r
r
o
w
Z
Yrightarrow Z
YrightarrowZ,且
Y
Y
Y函数依赖于
X
X
X,
X
→
Y
X\rightarrow Y
X→Y(前提条件:
Y
Y
Y不包含于
X
X
X,且
X
X
X不函数依赖于
Y
Y
Y),那么我们就称
Z
Z
Z传递函数依赖于
X
X
X,记作
X
⟶
T
Y
X\stackrel{T}{\longrightarrow}Y
X⟶TY。前提条件解析:
Y
⊈
X
Y\not\subseteq X
Y⊆X且
Y
↛
X
Y\not\rightarrow X
Y→X
什么是范式
范式就是依据关系模型的不同类别将数据表的划分为若干等级。我就会3个范式。
第一范式(1NF)
第一范式只是为了确保我们要创建的东西确实是一张表。第一范式的定义为:符合1NF的关系中的每个属性都不可再分。即表中的属性必须为基本数据类型,不然就没有办法创建表了。举例表一就不符合1NF所以不能被创建,因为其中的属性“销售”和“购进”不是基本属性(不能用基本数据类型表示),将表一改为表2就可以被创建了。
表一:
表二:
第二范式(2NF)
2NF的定义为在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的非主属性都完全函数依赖与码。
第三范式(3NF)
3NF的定义为在满足2NF的基础上,非主属性不存在传递函数依赖与码。
创建一张符合1NF、2NF、3NF的表的过程
例题:如下表所示
请将此表改为符合1NF、2NF、3NF的表。
1NF:只要能够将表中的各个属性找到对应的基本数据类型就可以说明此表就是1NF的表,如果不能找到对应的基本数据类型就将次属性在分割,知道可以找到能表示其属性的基本数据类型为止。从上表可以看出学号、姓名、系名、系主任、课名和分数可以分别用以下基本数据类型表示:varchar(10)、varchar(20)、varchar(10)、varchar(20)、varchar(20)、unsigned int。所以上述表就是1NF。
2NF:即将此表改造为完全函数依赖的表。其步骤如下:
第一步:找出数据表中所有的码(学号+课名)。
第二步:根据第一步所得到的码,找出所有的主属性(学号、课名)。
第三步:数据表中,除去所有的主属性,剩下的就都是非主属性了(姓名、系名、系主任、分数)。
第四步:查看是否存在非主属性对码的部分函数依赖(
学
号
⟶
P
课
名
学号\stackrel{P}{\longrightarrow}课名
学号⟶P课名,
学
号
⟶
P
分
数
学号\stackrel{P}{\longrightarrow}分数
学号⟶P分数,
分
数
⟶
P
课
名
分数\stackrel{P}{\longrightarrow}课名
分数⟶P课名)。
根据上面的四步最总可以创建出如下关系图:
3NF:
对数据表的操作——sql语句的使用
更多推荐
SQL数据库学习总结(一)
发布评论