数据库设计:在超类型/子类型上连接表

时间:2011-03-29 00:57:24

标签: database-design

我确信我不是第一个提出这个问题的人,但我找不到一个好的答案,我承认数据库设计不是我的主要优势。

假设我有一个产品,这个产品可以有子类型,产品A,产品B,产品C和产品D.超类型产品将具有一些共同属性,而子类型将具有特定于这些子类型的属性。非常标准的超类型/子类型设计。

现在我有了一个Users实体。一个产品可以有很多用户,一个用户可以有很多产品。理想情况下,我希望在这些连接表上加入一些关于该连接的特定属性。我遇到的问题是我不想做产品 - 用户连接表,而更像是与用户和产品子类型的连接,因此是ProductA用户,ProductB用户,ProductC用户,ProductD用户。原因是这两个实体的连接具有特定于该产品和用户连接的属性。

这种设计有意义吗?或者有更好的方法来处理这种行为。我喜欢我的产品的标准超类型/子类型,但是当我需要与其他实体加入时,我不确定如何处理。

2 个答案:

答案 0 :(得分:2)

在某些数据库中加入超类型是有意义的,加入某些数据库中的各个子类型是有意义的,将某些数据库中的超类型和子类型的不同数据连接起来是有意义的。

(ProductA,User)的表是否会与(ProductB,User)具有不同的列?如果是的话,那就是你的答案。不同的属性,不同的东西,不同的表。将m:n表分开,并引用子类型。

(后)

我回答了another SO question,其中包含了完全符合此问题的代码。

答案 1 :(得分:0)

好吧,如果您想捕获有关ProductA-User关系和ProductB-User关系的不同信息,那么Product-User表似乎没有意义。就个人而言,当我有产品表,以及ProductA,ProductB等时,无论是出于性能还是可维护性原因,我都对它感到后悔。我的直觉反应通常是消除产品表。