SQL - 用于将事物列表与行相关联的设计

时间:2010-12-07 17:41:50

标签: sql database-design postgresql

我有一个数据库。在一个表中,每行需要包含与该行关联的用户列表。最好的方法是什么?我有的选择是:

1)有一列“users_id”,它是“users”表的索引,每个id有多个条目,每个用户一个。下行是我需要额外的加入,上行是灵活的。用户很少,但行数很多,所以额外的加入真的值得吗?

2)所有用户ID都是2的幂。 “用户”字段是这些的逐位OR。看起来更简单,我不需要超过32个用户,但是在快速/可行的位上进行AND连接?

3)为任何用户组合创建一个单独的用户。有点像2)除了不太聪明。

3 个答案:

答案 0 :(得分:4)

以正确的方式行事。按位字段将阻止对该列进行任何有用的索引。

您应该有一个关联表,其中包含您拥有的每个组合的行。提供良好的查询性能是数据库的工作,它将通过结构良好的表来实现。不要在这里或那里冒出额外的连接,而是正确地和离散地规范化数据。

答案 1 :(得分:2)

alt text

答案 2 :(得分:1)

您没有提供有关数据目的的大量信息。我通常做这样的事情:

Table:      User_RowEntry_Assignment
UserId:     int
RowEntryId: uniqueidentifier

这是一个很好的模式,因为当用户分配不相关时,它可以在不查询用户分配的情况下查询数据。例如,如果要使用一组规范搜索所有RowEntry项,并且关联用户不重要,则无需获取用户信息。此外,您可以进行多个用户行分配,而不会出现任何复杂情况。