从三分之一来参考两个可能的表之一是不好的做法



我想在两个表中存储两种类似但无关的类型(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,让我所有的关联。

我知道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之一
  • 您可以使用外国键在表之间建立关系
  • 不需要第三列
  • 加入更容易(您不必检查第三列即可确定您将加入哪个表(

最新更新