数据库系统原理-函数依赖和关系模式分解

本文探讨了数据库系统原理,重点关注函数依赖和关系模式的分解。讲解了第一范式,强调了原子性的重要性,指出非原子值可能导致数据冗余。接着,介绍了关系数据库设计中的常见错误和如何通过模式分解解决这些问题。详细阐述了无损连接分解和函数依赖的闭包计算,以及规范化过程,包括1NF、2NF、3NF和BCNF。
摘要由CSDN通过智能技术生成

数据库系统原理-函数依赖和关系模式分解

学习本章相关理论知识可以为优化我们设计的数据库模型

第一范式

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

非原子域的例子:

  • 复合属性:名字集合
  • 多值属性:电话号码
  • 复杂数据类型:面向对象的

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

(1NF)

非原子值存储复杂并易导致数据冗余,在数据库系统中我们创建的表基本都属于第一范式

如何处理非原子值

  • 对于组合属性:让每个子属性本身成为一个单独的属性
  • 对于多值属性:为多值集合中的每个项创建一条元组(再建表)

原子性

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

例如,字符串通常会被认为是不可分割的,假设学生被分配这样的标识号:CS0012或SE1127,如果前两个字母表示系,后四位数字表示学生在该系内的唯一号码,则这样的标识号不是原子的(字符串+数字)

当采用这种标识号时,是不可取的。因为这需要额外的编程,而且信息是在应用程序中而不是在数据库中编码

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

关系数据库设计要求我们找到一个好的关系模式集合。一个坏的

设计可能导致以下问题

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

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

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

这样的关系模式存在以下问题

  • 数据冗余

  • 更新异常

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

  • 插入/删除异常

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

模式分解

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

(A,B,D),或(A,B,C)和(C,D),或(A,B)、(B,C)和(C,D),或 (A,D)和

(B,C,D)

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

*instructor*(*ID
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值