ToB企服应用市场:ToB评测及商务社交产业平台

标题: 数据库复习——数据库模式设计 [打印本页]

作者: 火影    时间: 2023-6-13 17:14
标题: 数据库复习——数据库模式设计
数据库模式设计如果不好会导致的问题:

  1.冗余
  2.导致数据一致性出现问题
  3.插入异常
  4.更新异常
  5.删除异常
函数依赖

  函数依赖是指一个或多个属性的取值可以确定另一个属性的取值。具体地说,如果一个关系模式R中属性集合X的取值能唯一地确定属性集合Y的取值,那么我们称属性集合Y对于属性集合X具有函数依赖。这被表示为X → Y,其中X称为函数依赖的左部,Y称为右部。
  例如,考虑一个包含学生信息的关系模式R,其中包含属性集合{学生ID,姓名,年龄,所在班级,班级导师}。假设我们观察到一个学生ID只对应一个姓名和年龄,那么我们可以说“学生ID函数依赖于姓名和年龄”,表示为{学生ID} → {姓名,年龄}。
  函数依赖在数据库设计中非常重要,因为它们可以帮助我们识别重复数据和设计表结构。如果我们正确地理解和应用函数依赖,就可以减少数据冗余,提高数据完整性和一致性。
数据库的键

 
  在关系型数据库中,键(key)是指一种特殊的属性或属性集合,用于唯一标识一个关系中的元组。键可以帮助我们在数据库中快速准确地定位、访问和修改数据。
关系数据库中的键可以分为以下三种类型:
  键在数据库中非常重要,因为它们可以帮助我们维护数据的完整性和一致性。通过使用键,我们可以确保每个元组都具有唯一的标识符,从而避免数据冗余和不一致性。
寻找数据库的键

  函数依赖集合的闭包
  定义:在关系数据库中,函数集合的闭包是指一个函数集合中所有可能的函数依赖组合所得到的函数依赖集合。换句话说,函数集合的闭包包含了原函数集合中所有可能的函数依赖和派生函数依赖。通过寻找函数集合的闭包,我们可以了解关系模式中所有可能的函数依赖,从而更好地设计和优化关系模式。
  以下是寻找函数集合的闭包的方法:
  函数依赖的规则包括以下几条:
  这些规则可以用来推导出函数依赖的闭包。通过这些规则,我们可以确定关系模式中的主键、候选键和冗余属性,从而优化关系模式的设计和性能。
 
  通过函数依赖的闭包求解键的办法(暴力法):
  启发式算法:
关系模式的分解

如何将一个模式分解为多个模式
  1. 当我们要将一个关系模式拆分为符合第一范式的多个关系模式时,需要遵循以下规则:
复制代码
example
  1. 例如,假设我们有一个包含以下属性的关系模式:
  2. 学生(学号,姓名,年龄,课程,成绩)   
  3. 在这个关系模式中,学号是主键,课程和成绩是非主属性。由于一个学生可以选修多门课程,课程和成绩之间存在多值依赖关系。为了消除多值依赖,我们可以将课程和成绩拆分成新的关系模式,并与原来的关系模式建立外键关系。这样就可以得到以下两个关系模式:
  4. 学生(学号,姓名,年龄)
  5. 选课(学号,课程,成绩)
  6. 在新的关系模式中,每个关系模式都符合第一范式的要求,因为每个属性都是单值属性,不存在重复组和多值依赖的问题。
复制代码
关系模式的范式
  1. 在关系型数据库中,范式(Normalization)是一种通过分解关系模式来减少数据冗余、提高数据一致性和数据可维护性的技术。范式分为不同的级别,从第一范式(1NF)到第五范式(5NF),每个级别都有其特定的规则和限制。以下是各个范式的详细说明:
复制代码
与范式结合的分解

已知关系模式和函数依赖集合保持FD和无损连接3NF模式分解的算法如下:
最小函数依赖集

如果函数依赖集合F满足如下条件,则称F为一个极小函数依赖集,也称为最小依赖集或最小覆盖:
如果G+ = F+,就称F与G等价。G = F的充分必要条件是F ⊆ G+ 且 G+ ⊆ F。
我们在求最小函数依赖集合时,事实上是将所有右边仅有一个属性的函数依赖的冗余消除掉,包括但不限于具有将具有传递性的几个函数依赖消除掉。最本质仍然是消除冗余
  1. 一个性质:任意一个数据库的关系模式都可以保持函数依赖和无损链接到分解到第三范式!
复制代码
第四范式

第四范式(4NF)是关系数据库中的一种规范化形式,它要求关系模式中的每个非平凡多值依赖都要被分解,以达到消除冗余和保证数据一致性的目的。
具体来说,第四范式的要求如下:
满足第四范式的关系模式可以消除非平凡多值依赖,避免数据冗余和更新异常,并且可以保证数据一致性。但是,第四范式的实现可能会导致关系模式的分解过于复杂,查询性能下降等问题,因此在实际应用中需要根据具体情况综合考虑。
多值依赖
  1. 多值依赖(Multivalued Dependency,MVD)是指一个关系模式中的某些属性集合对另一个属性集合存在依赖关系,但是这种依赖关系并不是函数依赖。在一个满足MVD的关系模式中,一个属性集合的取值可以对应多个其他属性集合的取值。
  2. 例如,假设我们有一个包含以下属性的关系模式:
  3. 学生(学号,姓名,选修课程,成绩)
  4. 在这个关系模式中,选修课程和成绩之间存在MVD,因为每个学生可以选修多门课程,每门课程的成绩都可能不同。因此,选修课程的取值可以对应多个成绩的取值,而不是像函数依赖那样只对应一个成绩的取值。
  5. MVD是关系数据库理论中一个重要的概念,可以帮助我们理解数据库设计和优化的一些问题。在实际应用中,如果一个关系模式中存在MVD,我们可以考虑将其拆分为符合第三范式或BCNF的多个关系模式,以提高数据库的性能和可维护性。
复制代码
下面将对于多值依赖举一个例子:
假设有一个关系模式R,包含属性A、B和C,其中属性A为主键。现在,我们发现存在这样的依赖关系:对于任意的两个元组r1和r2,如果它们在A属性上的值相等,那么在B属性和C属性上的值都是多值依赖的。这就是一个MVD,可以表示为A →→ B,C。
举个例子,假设关系模式R中有如下数据:

ABCa1b1, c1b2, c2a1b2, c2b1, c1a2b3, c3b4, c4a2b4, c4b3, c3我们可以看到,在A属性上有两个不同的值a1和a2,对于每个值,B和C属性上的值都是多值依赖的,即b1和b2、c1和c2,以及b3和b4、c3和c4。这就是一个MVD的例子。
需要注意的是,MVD不同于函数依赖,它是对于关系模式中的一组属性来说的,并且MVD的右侧可以包含多个属性,表示这些属性的组合是多值依赖的。MVD的出现可能导致数据冗余和更新异常,需要进行适当的规范化处理。
函数依赖和多值依赖的关系
  1. 结论:每个函数依赖都可以看作是一个多值依赖。具体来说,如果一个属性集合X决定了另一个属性集合Y,那么对于所有在属性集合X上取值相同的元组,它们在属性集合Y上的取值也必须相同。换句话说,如果我们交换在属性集合Y上的两个值,那么这些元组仍然是合法的。因此,可以将X和Y看作是一个MVD。
  2. 具体来说,它指出,如果一个FD X -> Y成立,那么对于在属性集合X上取值相同的任意两个元组,它们在属性集合Y上的取值必须相同。因此,交换在属性集合Y上的两个值不会改变这些元组的合法性。因此,我们可以将FD X -> Y视为MVD X - Y。
  3. 补集原理:如果一个属性集合X决定了另一个属性集合Y,那么对于属性集合Y的补集(即所有不在Y中的属性集合Z),X和Z之间必须存在MVD。这个原理是很有用的,因为它可以帮助我们从一个给定的函数依赖集合中推导出所有的MVD。具体来说,对于每个函数依赖X -> Y,我们可以通过补集原理推导出所有的MVD X - Z,其中Z是Y的补集。
复制代码
important:对于多值依赖,如果AB->->C,那么我们无法推出A->->C且B->->C!对于A->->BC,也无法推出A->->B和A->->C!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4