用户特征数据库架构

时间:2014-08-27 07:09:52

标签: sql sql-server database-design

我正在努力解决一个问题,即我有一个用户表,其中包含越来越多的用户特征(regligion,吸烟偏好等)。到目前为止,我使用的策略是为每个首选项添加一个列,键入另一个表。

例如,如果用户XYZ的RelgionId为3,则可能意味着他们是基督徒。在运行时,如果我需要他们的宗教信仰,我会加入另一张桌子。

到目前为止,这种策略已经奏效。但是,随着首选项数量的增加,我开始担心表格中的列数。此外,如果我需要为单个用户获取所有值,此策略会导致许多联接。

我想找出表示这些数据的最正常化的方法。有人有什么想法吗?

1 个答案:

答案 0 :(得分:1)

  

我想找出表示这些数据的最正常化方式。

嗯,根据您的描述,您似乎拥有相当规范的数据库。 如果要减少连接数,您要寻找的是非规范化

例如,如果要使用较少数量的联接访问这些用户首选项的子集,则可能需要将它们缓存在UserDetails表中,并将User表中的用户首选项与UserDetailsId外键链接。

如果你有一个很少变化的值的子集(例如,一个人的宗教信仰不经常改变),这实际上是可行的。

缺点是,如果其中一个更改,您可能需要在两个位置更改信息(取决于您是否还要保留该数据的规范化版本)。

我希望这会有所帮助。请随时要求进一步澄清。