函数依赖双向性技术问询:A与B能否互为函数依赖?含实例解析
函数依赖相关问题的清晰解答
咱先把这两个关于函数依赖的问题拆解开,用直白的逻辑和实例讲清楚:
1. A和B能否互为函数依赖?
当然可以!这种情况我们叫双向函数依赖,记做 A ↔ B,本质就是A → B和B → A这两个单向依赖同时成立。后面结合实例你就能明白具体场景了。
2. 若B函数依赖于A(A → B),A能否函数依赖于B(B → A)?原因是什么?
不一定,这完全取决于A和B之间的对应关系:
- 如果A和B是一一对应的关系,那
B → A就成立。意思是每个唯一的A值对应且仅对应一个B值,反过来每个唯一的B值也只对应一个A值。 - 但如果是一对多或者多对一但不反向的关系,就不行。举个例子:A是班级编号,B是学生姓名。
A → B肯定不成立(一个班有几十个学生,同一个班级编号对应N个不同姓名);就算B → A成立(每个学生只属于一个班),反向的依赖也不成立。这种单向依赖的情况在数据库里太常见了。
核心逻辑要记住:函数依赖X → Y的定义是任意两个元组,如果X的值相同,那Y的值必须完全一致。但反过来,Y值相同的时候,X值不一定相同——除非X和Y是严格的一一映射关系。
实例验证:病房编号与病房名称的双向依赖
拿你给出的这个数据表来说:包含患者编号、全名、病床号、病房编号、病房名称。能不能判定存在病房编号→病房名称且病房名称→病房编号的函数依赖?
答案是可以,只要符合医院的常规业务规则:
- 先看
病房编号→病房名称:每个唯一的病房编号必然对应唯一的病房名称(总不能一个编号同时对应“内科1病房”和“外科2病房”吧?那数据就乱套了),完全符合函数依赖的定义。 - 再看
病房名称→病房编号:正常医院里不会给两个不同的病房起一模一样的名字(不然医护人员都要搞混了),所以每个唯一的病房名称也只会对应一个病房编号。
这就是典型的一一对应关系,所以双向函数依赖是成立的,和你个人的理解完全一致哦。
内容的提问来源于stack exchange,提问作者Marcus
相关产品推荐
相关产品推荐

