在用户可以属于多个组的应用程序中,我当前正在将其组存储在称为groups
二进制的列中.每四个字节是一个32位整数,即GroupID
.但是,这意味着要枚举组中的所有用户,我必须以编程方式选择所有用户,并手动查明它们是否包含该组.
另一种方法是使用unicode字符串,其中每个字符都是表示组的整数,这使搜索变得容易,但有点像软糖.
另一种方法是创建一个单独的表,将用户链接到组.一列叫UserID
,另一列叫GroupID
.
哪种方式最好?或者,还有更好的方法?
用户和组之间存在多对多关系.这需要一个单独的表来组合用户和组:
User: (UserId[PrimaryKey], UserName etc.) Group: (GroupId[PrimaryKey], GroupName etc.) UserInGroup: (UserId[ForeignKey], GroupId[ForeignKey])
要查找给定组中的所有用户,您只需说:
select * from User join UserInGroup on UserId Where GroupId=
经验法则:如果您觉得需要在同一个字段中对多个值进行编码,则可能需要一个单独的表的外键.使用字节块或Unicode字符的技巧只是在一个字段中编码多个值的巧妙技巧.数据库设计不应该使用聪明的技巧 - 保存应用程序代码;-)