在我的应用程序中,我需要为用户分配多个组。有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
. | .
. | .
. | .
答案 0 :(得分:2)
毫无疑问,多对多是更好的设计。
第一种设计使编写查询变得困难。请考虑以下例行查询。
注意:我编辑了此回复以纠正我对原始代码的误读。然而,评论的主旨是相同的。第二个(多对多)是要走的路。
答案 1 :(得分:0)
No 2是标准的,你可以随时增加组的数量,也可以轻松处理简单的sql join查询。
答案 2 :(得分:0)
如果您想遵循实体关系模型的规则:
Many-to-many: users can belong to different groups & groups can have multiple users.
One-to-many: a user belongs to one group & groups can have multiple users.
你的第二个例子是多对多的,你的第一个例子不是一对多的。一对多将是:
USER_ID | GROUP_ID
------------------
1 | 1
2 | 15
3 | 2
4 | 15
5 | 1
6 | 2
7 | 15
其中user_id必须是唯一的。