减少数据库设计中的重复信息

时间:2010-11-30 05:41:58

标签: database-design architecture

我正在设计一个应用程序,当用户创建新帐户时,他们的帐户会填充数百行数据(预定义选项,设置等)。如果有的话,大多数用户很少会更改这些表中包含的信息。是否有任何好的设计模式可以减少数据库表中重复数据的数量?

到目前为止我的一些想法:

  • 将预定义选项保留在其中 自己的表,只保存自定义 用户表的选项。这个 似乎可以减少开销, 但我可以看到数据库调用 变得非常棘手。

  • 创建一个新的 每100个用户左右的数据库, 有一个单独的帐户数据库 指向用户数据库。 这是不是最佳的。

  • 创意3?

5 个答案:

答案 0 :(得分:1)

为100个用户创建一个新数据库听起来像一个疯狂而低效的想法。

我们谈论了多少数据,为什么要减少它?即使您有数百万用户,也只有几百万行不是一个非常大的表 - 除非每个用户的数据大小是多兆字节。精心选择的索引应该足以优化用户表。但是,如果您只更改默认设置时存储用户设置,则可以更简单地修改所有用户的默认设置。

答案 1 :(得分:0)

,不要为任意数量的用户创建新数据库。

坚持选项1。

甚至可以设置已激活所选选项/已应用规则的用户组。

UserRoles / Rules可能会变得棘手,但你不想通过为新用户维护多个表/数据库来为自己拍摄。

您需要实施UsersUserGroupsUserRolesUserRules

此外,如果您看到每行重复的值,则需要查看Database normalization

答案 2 :(得分:0)

这实际上取决于用户选项填充了多少个表,但是如果绝大多数时候用户选项都是相同的默认值,那么你可以将它们放在自己的表中,然后只是使用视图使数据无缝拉出。 (所以选项1)

答案 3 :(得分:0)

查看字段的使用统计信息,并将通常更改的字段集中在一起,这样如果该用户没有记录那些不常更改的字段,那么它们就会回归到默认值

我认为有一种方法可以使用连接或其他类似的默认设置

答案 4 :(得分:0)

当然,创建基本配置文件(或可能是一组基本配置文件,例如基于国籍或任何其他有意义的分区),其中表示所有默认规则和值。

在用户级别仅创建“例外”,即仅创建用户已更改的值,并始终将配置文件作为相关基本配置文件与特定于用户的例外之间的连接进行访问(希望这些例外将为空,即在DB中不存在)。

唯一的问题是各种默认值应该分组在一些较小的(在字段数的意义上)表中,否则你不会从这种方法中获得任何好处(即,如果你把所有可能的设置在单个表记录中,只要用户只更改一个字段,就必须立即复制所有内容,这将完全没有任何好处。