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

Mdi*_*ion 7 database settings schema

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

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

谢谢.

Ron*_*nis 5

对数据进行序列化几乎总是一个坏主意,因为这样做会削弱 dbms。用于生产高效 dbms 的所有人年都将浪费在序列化的比特桶上。

如果您将应用程序逻辑与每个设置挂钩,我认为您应该将其实现为:

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

或者

每个设置(或一组相关设置)1 个表。 这具有上述所有优点,但当您需要一次获取大部分或所有设置时,会用 rowsize 换取性能损失。当设置是可选的时,如果实际数据稀疏,则此替代方案会小得多。

此外,很多列通常是一种“气味”,这表明您没有正确地对数据进行标准化,但不一定是这样。只有您知道您的数据。


ora*_*ips 4

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

  1. Users:每个用户的表,其中包含用户可能始终拥有的属性,例如用户名和密码。该表也可以保留外键,但这是一种启发式方法,还取决于关系是零对一还是零对多。后者需要一个单独的表。
  2. 特点:两种选择
    1. 每个功能都有一行的表,实际上是一个哈希表,包含 userId、名称和值列。这也可能是建立外部关系的地方,但您将无法在此设置中强制执行数据完整性。
    2. XML,但仅适用于具有允许您查询数据功能的数据库,或者仅适用于您不需要查询但仅在应用程序服务器上使用的数据。

我认为更大的答案是你不会从最初的问题中得出一个解决方案,而是需要使用两者来适应数据。