场景:每个“用户”都有0或1“BankAccount”。每个“公司”都有0或1“BankAccount”。 “BankAccount”记录无法共享。如何设置我的数据库来建模?我试过这个:
“CompanyBankAccount”表,其中“BankAccountId”(主键)作为“BankAccount”表中的外键,“CompanyId”列作为“公司”表中的外键。
“Company”表,可以为“BankAccountId”列,作为“CompanyBankAccount”表中的外键。我对用户表遵循了相同的模式。
虽然这有效(强制执行以下规则:任何公司或用户都不能拥有超过1个银行帐户,并且其他用户或公司不能共享银行帐户),但创建新公司或拥有银行帐户的用户是繁琐(我必须首先插入具有NULL BankAccountId的公司/用户,然后插入新的BankAccount记录,然后插入新的[Company / User] BankAccountRecord,然后更新我刚刚插入的公司/用户记录中的“BankAccountId”字段) 。似乎应该有一个更简单的方法。有没有人有更优雅的解决方案?
答案 0 :(得分:0)
在公司和用户表中省略BankAccountId列可能更容易 - 只需通过CompanyId或UserId索引连接表,您就可以在需要时轻松提取BankAccountId。
答案 1 :(得分:0)
除非您具有多对多关系,否则不需要关系表,并且您不需要关系表和表之间的直接关系。
有几种方法可以做到这一点,例如UserId
表中只有CompanyId
和BankAccount
:
User
UserId int primary key
...
Company
CompanyId int primary key
...
BankAccount
UserId int null
CompanyId int null
...
您可以将BankAccountId
放入User
和Company
表中:
User
BankAccountId int null
...
Company
BankAccountId int null
...
BankAccount
BAnkAccountId int primary key
...
您可以使用BankAccount
表中的单个键,以及关系类型的标志:
User
UserId int primary key
...
Company
CompanyId int primary key
...
BankAccount
OwnerId int not null
IsCompanyAccount bit not null
...