首页 > 编程知识 正文

关系模式的基本函数依赖,mysql分析函数

时间:2023-05-05 22:34:58 阅读:163024 作者:4145

一.基础概念

要理解范式,首先要知道什么是关系数据库。 如果你不知道的话,我就不容易再轻易说了。 关系数据库是用二维表保存数据。 表与表之间……(省略10w字)。

然后,应该理解以下概念。

实体:客观存在于现实世界中,可以区分的东西。 例如“一个学生”、“一本书”、“一门课”等。 应该强调的是,这里所说的“事物”,不仅是看得见的“事物”,也可以是虚拟的,倒不如说是“老师和学校的关系”。

属性:教科书中解释为“实体具有的某种特性”。 由此可见,属性最初是一个逻辑概念,例如,“性别”是“人”的属性。 在关系数据库中,属性还是一个物理概念,可以将属性视为“表列”。

元组:表中的一行是元组。

分量:元组属性值。 在关系数据库中,这是操作原子。 这意味着关系数据库在做某事时属性是“不可分离的”。 否则就不是关系数据库了。

代码:可以唯一确定表中具有一个元组的属性(或属性组)。 如果有多个那样的代码,大家都称为候补代码。 从候补代码中选择一个做老板。 那个称为主要代码。

完整代码:如果一个代码包含所有属性,则此代码为完整代码。

主属性:只要一个属性出现在某个候选代码中,该属性就是主属性。

非主要属性:与上述相反,未出现在任何候选代码中。 此属性是非主要属性。

外部码(属性)或属性组),它不是编码,但是是另一个表的编码,它是外部码。

二、六种范式

那么,到此为止,我介绍了掌握范式所需的所有基础概念,这里说明范式。 首先,必须理解范式的包含关系。 如果一个数据库设计符合第二范式,也一定符合第一范式。 只要符合第三范式,就一定也符合第二范式…

第一范式(1NF )属性不可分离。

我之前介绍了属性值的概念,我们说它是“不可分割的”。 第一范式的要求属性也是不可分离的。 那么,什么不能与属性值区分开来呢? 举个例子:

名字

电话

age

大宝

13612345678

22

小明

13988776655

010-1234567

21

Ps :在此表中,属性值为“分钟”。

名字

电话

age

手机

座机

大宝

13612345678

021-9876543

22

小明

13988776655

010-1234567

21

Ps :在此表中,属性为“分钟”。

两种情况都不满足第一范式。 不满足第一范式的数据库不是关系数据库! 所以,我们不能用任何关系数据库管理系统来制定这样的“表”。 (也就是说,只要是关系数据库就是第一模式)

第二范式(2NF ) :符合1NF,且非主属性完全依赖于代码。

听起来很神秘,但其实没什么。

一个候选代码中的主属性也可能有一些。 如果主要属性不能单独用作候选代码,则也无法确定主要属性以外的属性。 举个反例吧。 考虑一下小学的教务管理系统吧。 学生在课堂上指定老师、教材、教室和时间。 大家去上课吧。 没有问题。 那么,数据库怎么设计? (学生的课表)。

学生

路线

教师

老师的职称

文本

教室

上课时间

小明

一年级的国语(上) ) ) ) ) )。

大宝

副教授

《小学语文1》

101

14点30分

一个学生上课,一定在特定的教室里。 所以(学生,上课) -教室

一个学生上课,一定会有特定的老师教。 所以(学生,上课) -老师

一个学生上课,他的老师的作用就可以确定。 所以(学生,课程) -老师的作用

一个学生上课,一定是特定的教材。 所以(学生,课程) -教材

一个学生上课,一定要在特定的时间。 所以(学生,上课) -上课时间

所以,(学生,课程)是代码。

但是,因为一节课,一定要指定某教材,一年级的国语一定要用《小学语文1》,所以有课-教材。 (学生,课程)是代码,但课程决定教材。 这称为不完全依赖或部分依赖。 一旦发生这种情况,就不满足第二范式!

有什么不好的吗? 想想看:

1、校长新增“微积分”这门课。 教材是《大学数学》。 我该怎么办? 学生还没有选课,学生是主要属性。 主属性不能为空。 上课怎么记录? 教材能记住多少? ……郁闷了吧? (插入异常)

2、下学期学一年级语文(上)的学生不在了,学了一年级语文(下)的话,表中一年级语文(上)就不存在了,010 ) 30 ) 10 )也就没有了。 这时,校长问:“一年级语文(上)使用的教材是什么? ……郁闷了吧? (删除例外)

3、校长说:“一年级的国语(上)要改教材,改成《小学语文1》。 有一个

10000个学生选了这么课,改动好大啊!改累死了……郁闷了吧?(修改异常)

那应该怎么解决呢?投影分解,将一个表分解成两个或若干个表

学生

课程

老师

老师职称

教室

上课时间

小明

一年级语文(上)

大宝

副教授

101

14:30

学生上课表新

课程

教材

一年级语文(上)

《小学语文1》

课程的表

第三范式(3NF):符合2NF,并且,消除传递依赖

上面的“学生上课表新”符合2NF,可以这样验证:两个主属性单独使用,不用确定其它四个非主属性的任何一个。但是它有传递依赖!

在哪呢?问题就出在“老师”和“老师职称”这里。一个老师一定能确定一个老师职称。有什么问题吗?想想:

1、老师升级了,变教授了,要改数据库,表中有N条,改了N次……(修改异常)

2、没人选这个老师的课了,老师的职称也没了记录……(删除异常)

3、新来一个老师,还没分配教什么课,他的职称记到哪?……(插入异常)

那应该怎么解决呢?和上面一样,投影分解:

学生

课程

老师

教室

上课时间

小明

一年级语文(上)

大宝

101

14:30

老师

老师职称

大宝

副教授

BC范式(BCNF):符合3NF,并且,主属性不依赖于主属性

若关系模式属于第一范式,且每个属性都不传递依赖于键码,则R属于BC范式。

通常BC范式的条件有多种等价的表述:每个非平凡依赖的左边必须包含键码;每个决定因素必须包含键码。BC范式既检查非主属性,又检查主属性。当只检查非主属性时,就成了第三范式。满足BC范式的关系都必然满足第三范式。还可以这么说:若一个关系达到了第三范式,并且它只有一个候选码,或者它的每个候选码都是单属性,则该关系自然达到BC范式。

一般,一个数据库设计符合3NF或BCNF就可以了。在BC范式以上还有第四范式、第五范式。

第四范式:要求把同一表内的多对多关系删除。

第五范式:从最终结构重新建立原始结构。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。