我有一个数据库。在一个表中,每行需要包含与该行关联的用户列表。最好的方法是什么?我有的选择是:
1)有一列“users_id”,它是“users”表的索引,每个id有多个条目,每个用户一个。下行是我需要额外的加入,上行是灵活的。用户很少,但行数很多,所以额外的加入真的值得吗?
2)所有用户ID都是2的幂。 “用户”字段是这些的逐位OR。看起来更简单,我不需要超过32个用户,但是在快速/可行的位上进行AND连接?
3)为任何用户组合创建一个单独的用户。有点像2)除了不太聪明。
答案 0 :(得分:4)
以正确的方式行事。按位字段将阻止对该列进行任何有用的索引。
您应该有一个关联表,其中包含您拥有的每个组合的行。提供良好的查询性能是数据库的工作,它将通过结构良好的表来实现。不要在这里或那里冒出额外的连接,而是正确地和离散地规范化数据。
答案 1 :(得分:2)
答案 2 :(得分:1)
您没有提供有关数据目的的大量信息。我通常做这样的事情:
Table: User_RowEntry_Assignment
UserId: int
RowEntryId: uniqueidentifier
这是一个很好的模式,因为当用户分配不相关时,它可以在不查询用户分配的情况下查询数据。例如,如果要使用一组规范搜索所有RowEntry
项,并且关联用户不重要,则无需获取用户信息。此外,您可以进行多个用户行分配,而不会出现任何复杂情况。