在我的应用程序中,我需要为我的用户分配多个组。有 1000 多个用户和 10-15 个群组。
哪种数据库设计更好?
一对多:
USER_ID | GROUP_1 | GROUP_2 | ... | GROUP_15
--------------------------------------------
1 | true | false | ... | true
2 | false | true | ... | true
3 | true | true | ... | true
. | . | . | ... | .
. | . | . | ... | .
. | . | . | ... | .
或多对多:
USER_ID | GROUP_ID
------------------
1 | 1
1 | 15
2 | 2
2 | 15
3 | 1
3 | 2
3 | 15
. | .
. | .
. | .
?
最佳答案
毫无疑问,多对多是更好的设计。
第一种设计使编写查询变得困难。考虑以下例行查询。
- 指定用户是否属于指定组?为此,您必须对每个组使用不同的查询。这是不希望的。此外,如果您使用组的列名称,则组列表是数据库架构的一部分,而不是数据的一部分,其中用户是数据。
- 指定用户属于哪些组?您可以简单地返回单行,尽管许多应用程序可能更喜欢(并且精通)迭代结果集。迭代列的子集是可行的,但不自然。
- 指定组包含哪些用户?现在您回到每个组的不同查询。 我将把这些东西的演示留给读者作为练习。 SQL 数据库近似的关系模型旨在处理关系和键(表和主/外键)。信息应作为数据(而非元数据)存在于一处(且仅一处)。多列方法缺乏标准化,将成为 future 维护的难题。
注意:我编辑了此响应以纠正我对原始代码的误读。然而,评论的主旨是相同的。第二个(多对多)是要走的路。
关于mysql - 数据库设计。一对多还是多对多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34730703/