将用户添加到数据库中的多个组的最佳方法是什么?

Vin*_*abb 3 sql database

在用户可以属于多个组的应用程序中,我当前正在将其组存储在称为groups二进制的列中.每四个字节是一个32位整数,即GroupID.但是,这意味着要枚举组中的所有用户,我必须以编程方式选择所有用户,并手动查明它们是否包含该组.

另一种方法是使用unicode字符串,其中每个字符都是表示组的整数,这使搜索变得容易,但有点像软糖.

另一种方法是创建一个单独的表,将用户链接到组.一列叫UserID,另一列叫GroupID.

哪种方式最好?或者,还有更好的方法?

Jac*_*esB 10

用户和组之间存在多对多关系.这需要一个单独的表来组合用户和组:

User: (UserId[PrimaryKey], UserName etc.)
Group: (GroupId[PrimaryKey], GroupName etc.)
UserInGroup: (UserId[ForeignKey], GroupId[ForeignKey])
Run Code Online (Sandbox Code Playgroud)

要查找给定组中的所有用户,您只需说:

select * from User join UserInGroup on UserId Where GroupId=<the GroupId you want>
Run Code Online (Sandbox Code Playgroud)

经验法则:如果您觉得需要在同一个字段中对多个值进行编码,则可能需要一个单独的表的外键.使用字节块或Unicode字符的技巧只是在一个字段中编码多个值的巧妙技巧.数据库设计不应该使用聪明的技巧 - 保存应用程序代码;-)