我想在两个表中存储两种类似但无关的类型(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,让我所有的关联。
或
我知道A(或B(的ID和类型,请让我链接到。
也可能值得注意的是,我将仅允许C
s与A
'S或B
'S相关联。
要回答您的问题,我不认为这是不好的做法,因为一些流行的框架(例如,导轨,休眠(模型,它们所说的是与同一表结构的多态性关联。但是,重要的是要注意,正如您提到的,不可能使用此结构使用外键约束。
SQL中有其他替代方案,可以允许类似的结果而不会违反正常形式,但他们每个人都倾向于有自己的警告。
在我看来,最好的做法是为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之一
- 您可以使用外国键在表之间建立关系
- 不需要第三列
- 加入更容易(您不必检查第三列即可确定您将加入哪个表(