数据库设计中的函数依赖与键的深入解析
立即解锁
发布时间: 2025-08-23 01:01:54 阅读量: 2 订阅数: 12 

### 数据库设计中的函数依赖与键的深入解析
#### 1. 复合函数依赖
函数依赖的决定因素可以由多个属性组成。例如,课程成绩由学生和课程共同决定,即 (StudentNumber, ClassNumber) → Grade。在这种情况下,这个决定因素被称为复合决定因素。
一般来说,如果 (A, B) → C,那么单独的 A 或 B 都不能决定 C。然而,如果 A → (B, C),则有 A → B 和 A → C(这被称为分解规则)。同时,如果 A → B 且 A → C,那么 A → (B, C)(这被称为合并规则)。
#### 2. 寻找函数依赖
为了确定函数依赖,我们以 SKU_DATA 和 ORDER_ITEM 表为例进行分析。
##### 2.1 SKU_DATA 表中的函数依赖
在表中寻找函数依赖时,我们要问“是否有某列能决定另一列的值”。
- **Department 与 Buyer 的关系**:知道 Department 的值不能确定唯一的 Buyer 值,因为一个部门可能有多个采购员。例如,“水上运动”部门关联了 Pete Hansen 和 Nancy Meyers。但反过来,知道 Buyer 的值可以确定 Department 的值,所以 Buyer → Department。
- **Buyer 与其他列的关系**:Buyer 不能决定 SKU 和 SKU_Description,因为一个采购员可能负责多个 SKU 及其描述。
- **SKU 与其他列的关系**:知道 SKU 的值就能确定 SKU_Description、Department 和 Buyer 的值,即 SKU → (SKU_Description, Department, Buyer)。同理,SKU_Description 也能决定其他列,即 SKU_Description → (SKU, Department, Buyer)。
综上所述,SKU_DATA 表中的函数依赖如下:
| 函数依赖 | 说明 |
| ---- | ---- |
| SKU → (SKU_Description, Department, Buyer) | SKU 能决定其他三列的值 |
| SKU_Description → (SKU, Department, Buyer) | SKU 描述能决定其他三列的值 |
| Buyer → Department | 采购员能决定所属部门 |
需要注意的是,不能仅仅根据样本数据来确定函数依赖,必要时要询问创建数据的应用程序的专家用户。
##### 2.2 ORDER_ITEM 表中的函数依赖
- **OrderNumber 与其他列的关系**:OrderNumber 不能决定 SKU、Quantity、Price 或 ExtendedPrice,因为一个订单可能包含多个 SKU。
- **SKU 与其他列的关系**:SKU 不能决定 OrderNumber、Quantity 或 ExtendedPrice,因为一个 SKU 可能出现在多个订单中。
- **SKU 和 Price 的关系**:虽然从数据上看 SKU → Price,但实际上价格可能会因促销等因素改变,所以需要 (OrderNumber, SKU) → Price 来准确记录实际支付价格。
- **其他列的情况**:Quantity、Price 和 ExtendedPrice 都不能决定其他列。
- **列对的情况**:(OrderNumber, SKU) 能决定 Quantity、Price 和 ExtendedPrice,即 (OrderNumber, SKU) → (Quantity, Price, ExtendedPrice)。同时,由于 ExtendedPrice = Quantity * Price,所以 (Quantity, Price) → ExtendedPrice。
总结 ORDER_ITEM 表中的函数依赖如下:
| 函数依赖 | 说明 |
| ---- | ---- |
| (OrderNumber, SKU) → (Quantity, Price, ExtendedPrice) | 订单号和 SKU 能决定数量、价格和扩展价格 |
| (Quantity, Price) → ExtendedPrice | 数量和价格能决定扩展价格 |
识别函数依赖对于数据库设计至关重要,要确保理解并能熟练运用。
#### 3. 决定因素值何时唯一
有时候函数依赖的决定因素在关系中是唯一的,有时候则不是。例如,在 SKU_DATA 表中,SKU 和 SKU_Description 的值是唯一的,但 Buyer 不是唯一的,尽管它是决定因素。
实际上,只有当一个决定因素能决定关系中的所有其他列时,它在关系中才是唯一的。在 SKU_DATA 表中,SKU 和 SKU_Description 能决定所有其他列,所以它们是唯一的;而 Buyer 只能决定 Department 列,所以不是唯一的。
在 ORDER_ITEM 表中,(OrderNumber, SKU) 能决定所有其他列,所以是唯一的;(Quantity, Price) 只能决定 ExtendedPrice,所以不是唯一的。因此,不能仅仅通过寻找唯一值来确定所有函数依赖的决定因素,最好结合业务活动的本质并询问用户。
#### 4. 键的类型
关系模型中有多种键,包括候选键、复合键、主键、代理键和外键。
##### 4.1 候选键
候选键是能决定关系中所有其他列的决定因素。SKU_DATA 表有两个候选键:SKU 和 SKU_Description。ORDER_ITEM 表只有一个候选键:(OrderNumber, SKU)。候选键能唯一标识关系中的一行。
##### 4.2 主键
在设计数据库时,会从候选键中选择一个作为主键。主键是数
0
0
复制全文
相关推荐










