2011-03-28 39 views
0

目前我有多个N:2个表之间m关系:多个多个到多个关系之间的相同表或与识别属性的n:m关系?

Users --> Favourites(user_id,post_id) <-- Posts 
Users --> Follow(user_id,post_id)  <-- Posts 

你愿意有2个连接表或只是一个与这标志着联接类型的属性连接表,所以像:

Users --> Users_Posts (user_id,post_id,type(VALUES="favourite,follow") <-- Posts 

这与我在应用程序中的示例并不完全相同,但我认为您可以明白。

回答

1

我不认为这里有一个“正确的”答案。我认为它取决于。如果您使用带有“关系类型”列的单个表,并且经常只想提取单一类型的关系(比如说最爱),那么针对该表的每个查询都需要应用WHERE子句来筛选出您的类型不要想要。如果您没有正确索引非关键“关系类型”列,那么这可能会导致查询速度缓慢。此外,它使得未来的开发人员总是需要知道并记住过滤到他们想要的类型,或者他们可能意外地获得了他们不打算的关系数据。有两个单独的表更容易理解。例如,我更容易快速知道“收藏夹”表中的内容要比“Users_Posts”表中的内容要多,因此单独的表格可能会更快地传达差异。另一方面,如果您经常需要选择这两个关系类型在一个集合中,那么将它们放在一个表中更简单,因为您不需要担心使用UNION来组合数据从两张桌子变成一张单一的视图。如果有10,000种不同的可能的关系类型呢?你想要10,000张不同的桌子,还是你喜欢单桌?在这种情况下,大多数人会喜欢单桌。

所以我认为这取决于许多因素,如预期的用法,大小等。“正确”的答案更多的是艺术而不是科学。

相关问题