在表格中存储用户设置 - 如何?

时间:2010-12-27 09:53:31

标签: database schema settings

我为用户设置了大约200个设置,其中包括通知设置和用户对象活动的跟踪设置。问题是如何将其存储在数据库中?每个设置应该是一行还是一列?如果colunm那么表将有200个colunms。如果行然后大约3个colunms但每个用户200行x甚至1000万用户=不好。

那么我怎么能存储所有这些设置呢?注意:这些设置是文本输入和FK查找与其他表的混合。

感谢。

3 个答案:

答案 0 :(得分:4)

序列化数据几乎总是一个坏主意,因为这样做会削弱dbms。生产高效dbms所需的所有年份都将被浪费在一系列的串行数据上。

如果您针对每个设置连接了应用程序逻辑,我认为您应该将其实现为:

设置表中每个设置1列。 这样可以更轻松地利用dbms的强大功能,具有约束检查,参照完整性,正确的值数据类型以及优化程序的大量信息。缺点是行大小增加。

每个设置(或相关设置组)

1个表。 这具有上述所有优点,但是当您需要一次获取大部分或全部设置时,会换行行以获得性能损失。当设置是可选的时,如果实际数据稀疏,则此替代方法将显着缩小。

此外,许多列通常都是“气味”,这表明您没有正确规范化数据,但不一定是这样。只有您知道您的数据。

答案 1 :(得分:3)

您有200个要跟踪的设置建议灵活的数据库架构。因此,我建议采用混合方法:

  1. 用户:包含用户可能始终拥有的属性的每个用户行的表,例如用户名和密码。此表也可以保留外键,但这是一种启发式方法,并且还取决于关系是0到0还是0到0。后者需要单独的表格。
  2. 功能:两个选项
    1. 包含每个功能行的表,实际上是一个哈希表,包含userId,name和value列。这也可能是外国关系的一个地方,但您无法在此设置中强制执行数据完整性。
    2. XML,但仅限于具有允许您查询数据的功能的数据库,或仅适用于您不需要查询但仅适用于您的应用程序服务器的数据的数据库。
  3. 我认为更大的答案是,您不会从原始问题中找到一个解决方案,而是需要同时使用两者来适应数据。

答案 2 :(得分:2)

我认为200列绝对不是一个好主意,因为难以编写存储过程,手动查看数据或以后扩展到更多设置。

您可以为所有这200个设置尝试XML,然后每个用户只有1行。用户名和相应的设置xml。但同样会限制您的查询功能,但DB现在支持XML。您可以专门检出XML DB。