基于给定数据表分析部分依赖与传递依赖,验证相关理解
关于部分依赖与传递依赖的验证及实例分析
首先先把你提供的订单数据表整理成更清晰的格式:
| Cust_id | Name | Ord_no | Ord_Date | PROD-ID | Descr | Qty_ord |
|---|---|---|---|---|---|---|
| C001 | Pink | O81 | 15-Apr | P005 | Chisel | 6 |
| C001 | Pink | O81 | 15-Apr | P004 | Jane | 14 |
| C0075 | Red | O99 | 16-Apr | P015 | Saw | 3 |
| C009 | Black | O56 | 16-Apr | P033 | Punch | 24 |
| C009 | Black | O56 | 16-Apr | P004 | Jane | 9 |
| C001 | Pink | O88 | 17-Apr | P015 | Saw | 10 |
你的理解验证:对一半,错一半
你说“部分依赖涉及复合主键”这个是完全正确的,但“传递依赖不涉及复合主键”就不准确了——传递依赖的核心是属性间的链式依赖关系,和主键是否是复合的没有必然绑定,它完全可以基于复合主键的一部分存在。
表中的部分依赖(Partial Dependencies)
首先得明确这个表的主键:因为单靠Cust_id、Ord_no或PROD-ID都无法唯一确定一行(比如C001有多个订单,O81包含多个产品),所以复合主键是(Cust_id, Ord_no, PROD-ID)。
部分依赖的定义是:非主键属性仅依赖于复合主键中的某一个(而非全部)属性。在这个表中,这类依赖非常明显:
Name→ 仅依赖Cust_id:不管订单号、产品ID是什么,C001对应的Name永远是Pink,C0075永远是Red,和主键的另外两个部分无关。Ord_Date→ 仅依赖Ord_no:O81的订单日期固定是15-Apr,O99固定是16-Apr,和客户ID、产品ID没有关系。Descr→ 仅依赖PROD-ID:P005对应Chisel,P004对应Jane,产品描述只由产品ID决定,和客户、订单信息无关。
这些都是典型的部分依赖,因为它们没有依赖整个复合主键,只依赖其中的某一个组件。
表中的传递依赖(Transitive Dependencies)
传递依赖的定义是:存在A → B → C的链式依赖,其中A是主键(或主键的一部分),B和C都是非主键属性。
看你提供的当前表,所有非主键属性都是直接依赖于主键或主键的一部分,没有出现“非主键属性依赖另一个非主键属性”的情况,所以目前表中不存在传递依赖。
举个假设的例子,如果我们给表加一个Product_Category(产品类别)属性,且PROD-ID → Product_Category,再加一个Supplier(供应商)属性,且Product_Category → Supplier,那此时就会形成PROD-ID → Product_Category → Supplier的传递依赖——这里的PROD-ID是复合主键的一部分,所以传递依赖完全可以和复合主键相关。
内容的提问来源于stack exchange,提问作者Rohan Kapoor
相关产品推荐
相关产品推荐

