外键引用非关联表主键是否合法?在线问诊系统ER图中外键设置有效性咨询
关于外键合法性的两个问题解答
1. 引用非另一张表主键的外键是否合法?
当然合法!外键的核心要求是引用的字段必须能唯一标识被引用表中的单条记录,主键只是最常用的满足这个要求的字段,但绝不是唯一选项。只要被引用的字段在所属表中设置了UNIQUE(唯一约束),哪怕它不是主键,完全可以作为外键的关联目标。
举个实际场景的例子:比如我们有个users表,主键是user_id,同时给email字段加了唯一约束(保证一个邮箱只对应一个用户)。那另一个orders表就可以用user_email作为外键,关联users表的email字段——因为email是唯一的,能精准定位到对应的用户记录,完全符合外键的要求。
2. 在线问诊系统的外键设置是否合法?
这个设置不合法,原因很明确:
外键关联的字段必须满足“能唯一标识被引用表中的单条记录”这个硬性要求,但你提到的两个被引用字段都不满足:
HOSPITAL表的HOS_ADDRESS:医院地址一般不会设唯一约束——现实里可能有不同医院在同一地址(比如医疗大楼里的多家机构),或者同一家医院有多个分院地址,这个字段没法唯一确定某一家医院。CLINIC表的CLINIC_ADDRESS:同理,诊所地址也不具备唯一性,没法精准定位某一家诊所。
这两个字段既不是对应表的主键,也没有设置唯一约束,完全不符合外键的引用规则,所以这样的外键设置是不合法的。正确的做法应该是让DOCTOR表的外键分别关联HOSPITAL的HOS_ID和CLINIC的CLINIC_IDNO(也就是两张表的主键),这样才能保证关联的准确性和合法性。
内容的提问来源于stack exchange,提问作者Blue Silhouette
相关产品推荐
相关产品推荐

