- 电子商务数据库技术(第3版)
- 潘郁
- 1984字
- 2025-02-28 08:47:33
3.1.2 函数依赖和多值依赖
函数依赖反映了数据之间的内部联系,它是进行关系分解时的指导和依据,也是本章的讨论中心。
为了方便起见,我们假设R(A1,A2,A3,……,An)是一个关系模型,U={A1,A2,A3,……,An{是R的所有属性集合,X、Y和Z分别表示R中的属性子集。
如果X→Y,且Y不是X的子集,则称X→Y是非平凡的函数依赖。我们讨论的都是非平凡的函数依赖。
例如,在学生(学号,姓名,性别,系号,系负责人,课程名,成绩)这一关系中,{学号{→{姓名{,{系号{→{系负责人{,{学号,课程名{→{成绩{。
数依赖,记
设有一个“配件-供应商-库存”关系如下:
在该关系中,{配件编号,供应商名称{是关系的主关键字。因为配件编号能唯一确定一种配件的名称及其规格,所以属性“配件名称”“规格”部分函数依赖于主关键字{配件编号,供应商名称{;由于一种配件可以由多家供应商供货,而不同的供应商所提供的价格是不一样的,所以只有知道了配件编号和供应商名称才能确定配件价格,因此,“价格”完全函数依赖于主关键字{配件编号,供应商名称{。同样,“库存量”完全函数依赖于主关键字{配件编号,供应商名称{。
另外,“库存占用资金”等于“价格”与“库存量”的乘积,所以“库存占用资金”函数依赖于价格和库存量,这样“库存占用资金”则传递函数依赖于{配件编号,供应商名称{这个主关键字。
前面已经介绍过“关键字”的概念,介绍了函数依赖的概念后,我们就可以给“关键字”进行精确的定义。
(1)候选关键字(候选码)。
包含在任意一个候选关键字中的属性,称为主属性。不包含在任何候选关键字中的属性,称为非主属性。
在极端情况下,若关系的全部属性作为关键字,则称为完全关键字。此时关系中没有非主属性。
候选关键字具有标识的唯一性和无冗余性两个性质。
①标识的唯一性:对于R中的每一元组,K的值确定后,该元组就确定了。
②无冗余性:当K是属性集合时,K的任何一个部分都不能标识该元组。
(2)外关键字(外码)。
主关键字和外关键字提供了表示关系之间联系的手段。
设有“职工”关系如下:
设有“部门”关系如下:
在“职工”关系中,“部门编号”不是它的关键字,但“部门编号”是“部门”关系的主关键字,所以,“部门编号”是“职工”关系的外关键字。
属性之间的关系中除了函数依赖,还有多值依赖。与函数依赖相比,多值依赖不太直观,较难理解。关系模式中如果存在多值依赖,则和函数依赖一样也会造成数据冗余,导致数据操作异常。
例如,某单位的供应部门直接将各工程所需要的物资从供应商的仓库发往工程所在地,为了规划运输方案,我们可以定义以下的关系来存储所有零件的可能的运输源和目的地。
这个关系模式的关键字为{物资名,工程名称,供应商名{,其中除了有函数依赖关系{工程名称{→{工程地址{,{供应商名{→{供应商地址{,还有多值依赖{物资名{→→{工程名称,工程地址{,{物资名{→→{供应商名,供应商地址{。因为这一关系中,一种物资可以被多个工程使用,与该物资由谁提供无关;同样,一种物资可以由多个供应商提供,与哪些工程使用该物资无关。可以看出,由于多值依赖的存在,这个关系有冗余。
另外,很明显,关系模式中至少有3个属性才有可能存在多值依赖。函数依赖可以看成是多值依赖的一种特殊情况,即函数依赖一定是多值依赖;而多值依赖是函数依赖的概括,即存在多值依赖的关系时,不一定存在函数依赖关系。