我想在两个表格中存储两个相似但不相关的类型(A
和B
)。
我还有一张表C
。
来自A
或B
的内容可与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。
值得注意的是,我以编程方式仅允许C
与A
的OR B
&#相关联39;不是两者。
答案 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