文章目录

  • 一,第一范式
  • 二,关系数据库设计中易犯的错误
    • 2.1 数据冗余
    • 2.2 插入、删除、修改异常
  • 三,模式分解(I)
  • 四,函数依赖(FD)
    • 4.1 什么是函数依赖
    • 4.2 函数依赖的使用
    • 4.3 函数依赖集的闭包
      • Armstrong 公理
      • 计算 F^+^
  • 五,属性集的闭包
    • 5.1 什么是属性集的闭包
    • 5.2属性闭包的用途
  • 六,正则覆盖
    • 无关属性
    • 检测属性是否无关
  • 七,模式分解(II)
    • 规范化的目标
    • 分解应有的特性
  • 八,总结

一,第一范式

如果某个域中元素被认为是不可分的,则这个域称为是原子的

  • 非原子域的例子:
    ---- 复合属性:名字集合
    ---- 多值属性:电话号码
    ---- 复合数据类型:面向对象的

如果关系模式R中的所有属性的域是原子的,则R称为属于第一范式(1NF)

非原子值存储复杂并易导致数据冗余

  • 我们假定所有关系都属于第一范式

如何处理非原子值

  • 对于组合属性:让每个子属性本身称为一个属性
  • 对于多值属性:为多值集合中的每个项创建一条元组

原子性实际上是由域元素在数据库中被使用决定的

  • 例,字符串通常是被认为是不可分割的
  • 假设学生被分配这样的标识号:CS0012或EE1127,如果前两个数字表示系所,后四位表示学生在该系所内的唯一号码,则这样的标识号不是原子的
  • 当采用这种标识号时,是可取的。因为这需要额外的编程,而且信息是在应用程序中,而不是在数据库中编码。

二,关系数据库设计中易犯的错误

关系数据库设计要求我们找到一个“好的”关系模式集合。一个坏的设计可能导致:

  • 数据冗余
  • 插入、删除、修改异常

假设我们用以下模式代替instructor模式department模式

inst_dept(ID, name, salary, dept_name, building, budget)

2.1 数据冗余

每个系的dept_namebuildingbudget数据都要重复一次
缺点:浪费空间,可能会导致不一致问题

2.2 插入、删除、修改异常

更新异常

  • 更新复杂,容易导致不问题。
  • 例修改dept_name,很多相关元组都需要修改。

插入/删除异常

  • 使用空值null:存储一个不知道所在系所的教师信息,可以使用空值表示dept_namebuildingbudget数据,但是空值难以处理。

三,模式分解(I)

例,可以将关系模式(A,B,C,D)分解为:(A,B)和(B,C,D),或(A,C,D)和(A,B,D),或(A,B),(B,C)和(C,D)等等…

例,将关系模式inst_dept分解为:

  • instructor(ID, name, dept_name, salary)
  • department(dept_name, building, budget)

原模式(R)的所有属性都必须出现在分解后的(R1,R2)中:R = R1 ∪ R2

无损连接分解

  • 对关系模式R上的所有可能的关系r


目标:设计一个理论

  • 以判断关系模式R是否为“好的”形式(不冗余
  • 当R不是“好的”形式时,将它分解为模式集合{ R1,R2,…,Rn }使得:
    ---- 每个关系模式都是“好的”形式
    ---- 分解是无损链接分解
  • 我们的理论基于:
    ---- 函数依赖(function dependencies)
    ---- 多值依赖(multivalue dependencies)

四,函数依赖(FD)

4.1 什么是函数依赖

设R是一个关系模式,且有属性集 α包含于R,β包含于R

在R上成立当且仅当对任意合法关系r(R),若r的任意两条元组t1和t2在属性集α上的值相同,则它们的属性集β上的值也相同。

  • 即:t1[α] = t2[α] → t2[β] = t2[β]
  • 称:β函数依赖于α,α函数决定β
  • 如下图,图中的α和β满足函数依赖关系

函数依赖:一种完整性约束,表示特定的属性值之间的关系,可以用来判断模式规范化和建议还进

  • 函数依赖是码概念的推广
  • K是关系模式R的超码,当且仅当 K → R
  • K是R的候选码当且仅当
    ---- K → R,并且
    ---- 没有 α 包含于 K,使 α → R(不存在K的真子集α,使之满足 α → R)

函数依赖使我们可以表达用超码无法表达的约束,考虑模式

inst_dept(ID, name, salary, dept_name, building, budget)
  • 我们希望下列函数依赖成立:
    ---- dept_name → building
    ---- ID → building(码是一个比较特殊的FD,可以函数决定所有的属性)
  • 而不希望下列函数依赖成立:
    ---- dept_name → salary

4.2 函数依赖的使用

若果在关系模式R上所有合法关系都满足F,则称F在R上成立。

  • 其中 R = { r1®,r2®,… }

注:容易判断一个r是否满足给定的F。不易判断F是否在R上成立。不能仅由某个r推断出F。R上的函数依赖F,通常由定义R的语义决定。

被所有的关系实例所满足的函数依赖称为平凡的

  • 例,A → A,AB → A,(ID,name)→ ID,ID → ID
  • 一般的,若β包含于α,则α → β是平凡的。即,
    平凡的函数依赖:若β包含于α,α → β。
    非平凡的函数依赖:若β不包含于α,α → β。

4.3 函数依赖集的闭包

Armstrong 公理



计算 F+

下列过程计算函数依赖集F的闭包:

F+ = F
repeatfor each F+中的函数依赖f对应f应用'自反率'和'增补率',将结果函数依赖加入F+for each F+中的一对函数依赖f1和f2if f1和f2可以使用'传递性'结合起来,则将结果函数依赖加入F+
until F+不再变化

由于包含n个元素的集合含有2n子集,因此共有 2n * 2n个可能的函数依赖。
后边会介绍完成此任务的另一过程。

五,属性集的闭包

如何判断集合α是否为超码

  • 一种方法是:计算F+,在F+中找出所有的α → β,检查{ β1β2β3 … } = R;
    但这么做开销很大,因为F+可能很大。
  • 另一种方法是:计算α的闭包。

5.1 什么是属性集的闭包

定义:给定一个属性集α,在函数依赖集F下由α函数确定的所有属性的集为F下α的闭包(记作α+

  • 检查函数依赖α → β是否属于F+ ↔ β包含于α+
  • 判断α是否为超码:α → β属于F+ ↔ R包含于α+

计算α+的算法

result := a;
while(result有变化) dofor each β → γ in F dobeginif β包含于resultthen result := result ∪ γenda+ := result

避免了找F+(反复使用公理)的麻烦。
示例讲解

最终,AG可以表示R中的所有属性,则说AG是R的一个key。

5.2属性闭包的用途

六,正则覆盖

数据库管理系统(DBMS)总是检查确保数据库更新不会破坏任何函数依赖。但如果F很大,其开销就会很大。因此我们需要简化函数依赖集

直观地说,F的正则覆盖(记作Fc)是指与F等价的“极小的”函数依赖集合

  • Fc中任何函数依赖都不包含无关属性
  • Fc中函数依赖的左半部都是唯一的
  • 例,α1 → β1,α1 → β2,可以写为α1 → β1β2


无关属性

定义:考虑函数依赖集合F及其中的函数一来α → β

  • 如果A∈α并且F逻辑蕴含F’ =(F - { α → β })∪ {(α → A )→ β},则称A在α中是无关的
    ---- 例,给定F = { A → C,AB → C },其中B在AB → C中是无关的,因为A → C逻辑蕴含了AB → C。
  • 如果A∈β并且F’ =(F - { α → β })∪ { α →(α → A )}逻辑蕴含F,则称A在β中是无关的
    ---- 例,给定F = { A → C,AB → CD },其中C在AB → CD中是无关的,因为即使删除C也能推出A → C。

检测属性是否无关


计算F的正则覆盖

repeat对F中的依赖利用'合并'规则α1 → β1 和 α1 → β2 替换成 α1 → β1β2找出含有无关属性的函数依赖 α → β(在α或β中)如果找到无关属性,从α → β中删除
until F不再变化

注:删除某些无关属性之后,可能导致合并规则可以使用,则必须重新应用。

七,模式分解(II)

规范化的目标

  • 以判断关系模式R是否为“好的”形式(不冗余,误插入,删除,更新异常
  • 当R不是“好的”形式时,将他分解成模式集合{ R1,R2,…,Rn }使得:
    – 每个关系模式都是“好的”形式
    – 分解是无损连接分解
    – 分解是保持依赖的

分解应有的特性




八,总结

  • 描述了原子域和第一范式假设;
  • 给出了数据库设计中易犯的错误,这些错误包括信息重复和插入、删除、修改异常;
  • 介绍了函数依赖的概念,展示了如何用函数依赖进行推导;
  • 理解F+,α+,FC
  • 介绍了如何分解模式,一个有效的分解都必须是无损的;
  • 如何分解是保持依赖的,则给定一个数据库更新,所有的函数依赖都可以由单独的关系进行验证,无须计算分解后的关系链接。

函数依赖和关系模式分解相关推荐

  1. 关系数据库理论----如何判断关系模式规范化达到第几范式

    文章目录 求关系模式最高达到第几范式的步骤 通俗理解1NF,2NF,3NF. 如何求关系模式的候选码 如何求闭包 函数依赖 求关系模式最高达到第几范式的步骤 根据给定的U和F,首先求它的候选码 根据候 ...

  2. 关系模式的规范化理论

    1.关系模式通常被简化为一个三元组: R(U, F) R:关系名 U:组成该关系的属性名集合 F:属性间数据的依赖关系集合 2.不规范的关系模式可能会带来的问题 以下面这个模式为例 学生(学号,姓名, ...

  3. 【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)

    关系数据理论 6.1 为什么要学习关系数据理论 什么是好的数据库逻辑设计 什么是数据依赖 关系模式的简化表示 6.2 规范化 - 关系的规范化理论 6.2.1 函数依赖 1.函数依赖 2.平凡函数依赖 ...

  4. 已知:关系模式R(U,F),U=ABCD,F={A→C,C→A,B→AC,D→AC},将模式R无损失连接并保持函数依赖,分解为3NF

    已知:关系模式R(U,F),U=ABCD,F={A→C,C→A,B→AC,D→AC},将模式R无损失连接并保持函数依赖,分解为3NF 解答步骤: ①求出候选码: L:B,D LR:A,C BD→ABC ...

  5. 关系模式设计的问题 函数依赖

    关系模式设计的问题 一.关系模式设计的问题 张表 1.假设有描述学生选课及住宿情况的关系模式 S-L-C CSno,Sname,Ssex,Sdept,Slol,Cno,Grade) 主键(Sno,Cn ...

  6. 关系模式判断候候选关键字 与 函数依赖无损连接

    关系模式判断候候选关键字 与 函数依赖无损连接 例题:设关系模式R(U, F),其中R上的属性集U={A, B, C, D, E},R上的函数依赖集F={A→B,DE→B,CB→E,E→A,B→D}. ...

  7. 关系数据理论(回顾关系模式、数据依赖、不规范的关系模式存在的问题、 函数依赖、非平凡函数依赖/平凡函数依赖、完全函数依赖/部分函数依赖定义、传递函数依赖,码)

    关系数据库的规范化理论是数据库逻辑设计的一个有力工具. 1.回顾关系模式         第2章中已经讲过,一个关系模式应当是一个五元组:                 R(U,D,DOM,F)   ...

  8. 【数据库】期末复习:SQL语句、关系代数的运算、范式的定义和判断、求最小函数依赖集、ER图转关系模式

    文章目录 SQL语句 查询select 其他 视图 关系代数的运算 并.差.笛卡尔积.投影和选择 连接 自然连接 笛卡尔积 详细版(如果完全不了解就看这里) 范式的定义和判断 如何求候选码 一些例题 ...

  9. 关系模式的分解与范式

    1.     为什么要研究数据库关系模式的分解? 答:因为现有的模式可能会存在一些数据增删改的弊端,比如说:数据冗余太大,更新异常,插入异常,删除异常.因此为了完善数据库的增删改查的功能,需要寻找一种 ...

最新文章

  1. 利用pyBoard的实验来讨论部分MicroPython特性
  2. Java8新特性Stream
  3. 【linux】tcpdump抓包
  4. es查询语句拼接 java_JAVA使用ElasticSearch查询in和not in的实现方式
  5. 最小公倍数核心算法记录
  6. 工业机器人用铸铁牌号_常用铸铁牌号
  7. ux设计师怎样找同类产品_没有预算? 别找借口。 便宜的UX上的UX 2:让我们开始构建。...
  8. 01_Influxdb1.7.7的安装配置启动
  9. Python学习入门基础教程(learning Python)--5.4 Python读文件详解
  10. mantis config_inc.php g_source,CentOS7下Mantis安装与配置
  11. Android (AMS)ActivityManagerService源码分析
  12. Web专家周末聚会都会说点啥
  13. Oracle根据月份获取其是哪个季度
  14. s8 android8 黑域,【转帖】 8.0未Root禁用系统软件(不用黑域、冰箱之类的软件)...
  15. 【推荐】区块链技术及行业应用资料合集
  16. python安装apk到手机_安卓手机怎么安装APK文件
  17. 【STM32】HAL库 STM32CubeMX教程四---UART串口通信详解
  18. 2014中国高中排行榜发布 华中师大一附中居首
  19. ArcGIS面矢量挖洞
  20. [乡土民间故事_徐苟三传奇]第八回_张财主误喊“你来看”

热门文章

  1. 手机号 3 4 4格式
  2. JS中~偏移量设定方式与案例分析
  3. 10分钟掌握表情包,1小时画出挤娃娃!
  4. 少儿机器人编程入门先学什么
  5. 如何存储社交软件中的「好友、粉丝关系」
  6. java 10个线程_Java线程池创建10个线程
  7. python的matplotlib安装包_matplotlib下载
  8. 拾人牙慧篇之——基于HTML5中websocket来实现消息推送功能
  9. 打造敏捷化的高绩效项目团队︱北汽研发项目管理中心项目经理张志强
  10. 五Spring Cloud Alibaba基于Nacos构建分布式配置中心