从第三个引用两个可能的表中的一个是不好的做法吗?

时间:2017-05-02 03:36:29

标签: database postgresql

我想在两个表格中存储两个相似但不相关的类型(AB)。

我还有一张表C

来自AB的内容可与C相关。

查询时,我希望能够让C的所有关系无法理解它们是来自A还是B

使用可以存储这些关系的单个表D是不好的做法吗?像

这样的东西
 __________________________________________
|         |                |               |
| id_of_c | id_of_relation | relation_type |
|_________|________________|_______________|
|    1    |        1       |       A       |
|    1    |        2       |       A       |
|    2    |        1       |       A       |
|    3    |        1       |       B       |
|_________|________________|_______________|

我知道这样做会阻止我使用外键,但我的大部分查询都是以下类型:

  

我知道C的ID,给我所有的联想。

OR

  

我知道A(或B)的ID和类型,告诉我所有与之相关联的C。

值得注意的是,我以编程方式仅允许CA的OR B&#相关联39;不是两者。

2 个答案:

答案 0 :(得分:0)

要回答你的问题,我不相信这是一个不好的做法,因为一些流行的框架(例如Rails,Hibernate)模型,他们所称的,具有相同表结构的多态关联。但是,需要注意的是,正如您所提到的,不可能对此结构使用外键约束。

虽然SQL中有一些替代方案可以在不违反正常形式的情况下获得类似的结果,但每个人都倾向于有自己的注意事项。

答案 1 :(得分:0)

在我看来,最佳做法是为A和C以及B和C之间的关系创建两个表。

表D_A:

ID_A   ID_C
1      2
2      1

表D_B:

ID_B   ID_C
1      3
2      1
  • 您可以随时扩展其中一个表D_C或D_B而不扩展其他表
  • 您可以使用外键来建立表之间的关系
  • 无需第三栏
  • 连接更容易(您无需检查第三列以确定您将加入哪个表)