首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >困惑于一个SQL表中的多个外键(最佳实践)

困惑于一个SQL表中的多个外键(最佳实践)
EN

Stack Overflow用户
提问于 2022-11-29 21:46:15
回答 1查看 34关注 0票数 -1

我试图用NaturalPersons、LegalEntities和它们的SocialNetworkAccounts列表来构建基本的数据库结构,这个表的简化结构如下所示:

代码语言:javascript
复制
NaturalPersons table:
 – ID [number] AI PK
 – Name [text]
 – Surname [text]

LegalEntities table:
 – ID [number] AI PK
 – CompanyName [text] unique

SocialNetworkAccounts table:
 – ID [number] AI PK
 – SocialNetworkLink [text]
 – SubjectID [number] FK

问题是,我只能将SubjectID链接到NaturalPersons.ID或LegalEntities.ID,并且只能考虑以下解决办法:

我可以为SocialNetworkAccounts做两张桌子,就像

代码语言:javascript
复制
SocialNetworkAccounts-NP table:
 – ID [number] AI PK
 – SocialNetworkLink [text]
 – PersonID [number] FK

 SocialNetworkAccounts-LE table:
  – ID [number] AI PK
  – SocialNetworkLink [text]
  – CompanyID [number] FK

但是,我不喜欢数据库中有许多类似的表,因为它会使查询和进一步开发复杂化。

我可以把外国钥匙放在前两张桌子上:

代码语言:javascript
复制
NaturalPersons table:
 – ID [number] AI PK
 – Name [text]
 – Surname [text]
 – SocialNetworkLinkID [number] FK

LegalEntities table:
 – ID [number] AI PK
 – CompanyName [text] unique
 – SocialNetworkLinkID [number] FK

SocialNetworkAccounts table:
 – ID [number] AI PK
 – SocialNetworkLink [text]

但那样的话,我将无法为每个人/公司添加多个条目(社交链接)。

我正在考虑另一种选择,我可以填写PersonID或CompanyID:

代码语言:javascript
复制
NaturalPersons table:
 – ID [number] AI PK
 – Name [text]
 – Surname [text]

LegalEntities table:
 – ID [number] AI PK
 – CompanyName [text] unique

SocialNetworkAccounts table:
 – ID [number] AI PK
 – SocialNetworkLink [text]
 – PersonID [number] FK
 – CompanyID [number] FK

但是SQL需要显示FK列中的数据。我需要类似于“复合外键”的东西,其中有“PersonID或CompanyID”。

因此,我对这种情况下的最佳实践感到困惑。我也不确定如何调用该特性(如果存在的话)。

EN

回答 1

Stack Overflow用户

发布于 2022-11-29 22:28:13

在这种情况下,我会创建两个表

具有非空外键的

  1. NaturalPersonsSocialNetworkAccounts和SocialNetworkAccounts.ID
  2. LegalEntitiesSocialNetworkAccounts,具有LegalEntities.ID和SocialNetworkAccounts.ID

的非空外键

我把这些叫做“关联表”。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74620572

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档