-1

场景:每个“用户”有 0 或 1 个“银行账户”。每个“公司”有 0 或 1 个“银行帐户”。“BankAccount”记录不能共享。如何设置我的数据库来对此进行建模?我试过这个:

“CompanyBankAccount”表,“BankAccountId”(主键)作为“BankAccount”表的外键,“CompanyId”列作为“Company”表的外键。
具有可为空的“BankAccountId”列作为“CompanyBankAccount”表中的外键的“Company”表。我对用户表遵循了相同的模式。

虽然这可行(强制执行规则,即任何公司或用户都不能拥有超过 1 个银行账户,并且其他用户或公司不能共享任何银行账户),但创建具有银行账户的新公司或用户是很麻烦的(我必须首先插入具有 NULL BankAccountId 的公司/用户,然后插入新的 BankAccount 记录,然后插入新的 [Company/User]BankAccountRecord,然后更新我刚刚插入的公司/用户记录上的“BankAccountId”字段)。似乎应该有一个更简单的方法。有没有人有更优雅的解决方案?

4

2 回答 2

0

省略 Company 和 User 表中的 BankAccountId 列可能更容易——只需按 CompanyId 或 UserId 索引连接表,您可以在需要时轻松提取 BankAccountId。

于 2012-06-04T17:03:09.947 回答
0

除非您有多对多关系,否则您不需要关系表,并且您不需要关系表和表之间的直接关系。

有几种方法可以做到这一点,例如在表中只使用一个UserId和:CompanyIdBankAccount

User
  UserId int primary key
  ...

Company
  CompanyId int primary key
  ...

BankAccount
  UserId int null
  CompanyId int null
  ...

您可以将其BankAccountId放在UserCompany表中:

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
  ...
于 2012-06-04T17:18:09.480 回答