【问题标题】:Role of foreign key in bidirectional relationships外键在双向关系中的作用
【发布时间】:2015-10-23 01:39:37
【问题描述】:

我对为客户和产品之间的双向关系设计数据库感到有些困惑。

需要明确的是,双向关系可确保客户了解他的产品,并且产品了解其客户。

我有一个客户表和一个产品表。产品表有一个客户表的外键。

要创建双向关系,客户表还应该包含产品表的外键吗?我见过 ORM examples,其中只有一个 FK 引用就可以实现双向关系,但仍然有点困惑,有人能告诉我吗?

如果我将 Product 表的 FK 放在 Customer 表中会有什么不同?

【问题讨论】:

  • 客户表中产品的 FK 会假定客户只能与(至多)一种产品相关联。就目前而言,一种产品只能与一个客户相关联。
  • 谢谢草莓,我的疑问被清除了。 :)
  • 所以这意味着单向和双向关系仅依赖于 orm 映射?请写一个答案,我会接受的。
  • ...而不是...?
  • 在实际环境中,客户和产品表之间不应该有任何关系,即使您应该按照 Gordon 的建议创建一个连接表,它应该与两个表关联意味着只有客户表中存在的客户和产品也一样。

标签: mysql database orm entity-relationship


【解决方案1】:

我认为您只需要一个CustomerProducts 表来表示关系:

create table CustomerProducts (
     CustomerProductId int not null auto_increment primary key,
     CustomerId int not null,
     ProductId int not null,
     Amount int not null,
     . . .
     foreign key (CustomerId) references Customers(CustomerId),
     foreign key (ProductId) references Products(ProductId)
);

这称为“联结”表。它可以有额外的列(例如Amount)来指定关系的特征。

【讨论】:

  • 虽然没有错,但我认为代理键(可能)具有误导性。
  • Gordon 客户和产品处于一对多关系中。我应该在问题中说明我的愚蠢。
猜你喜欢
  • 2020-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-12
  • 1970-01-01
  • 2011-05-16
  • 1970-01-01
相关资源
最近更新 更多