0

我正在设计一个为用户保存大量信息的数据库。目前我需要存储 20 个不同的值,但随着时间的推移,我可能会添加越来越多的值。

我在 StackOverflow 上查看了类似的问题,但通常以提问者没有正确设计他的表格而告终。

因此,根据我在 StackOverflow 上看到的情况,我应该:

  1. 创建一个包含许多空列的表并在需要时使用它们(这对我来说似乎很糟糕)
  2. 创建一个用户表和一个信息表,其中信息是一个键值对:[user_id, key, value]
  3. 你还有什么可以建议的吗?

请记住,这是针对 MySQL 数据库的,所以我理解不喜欢关系数据库上的键值表。

谢谢。

4

2 回答 2

0

嗯,我对这个问题有点困惑,但听起来你想为一个用户提供很多属性,对吧?并且将来您想添加更多?好吧,那不是只有某种 customer_attribute_ref 参考表,然后您可以通过插入参考表轻松添加更多内容,然后在客户表中您至少有三列:1.客户 ID 2.客户属性ID 3. 客户属性值...

可能是我错过了你的问题。你能澄清一下吗

于 2012-06-25T05:07:55.610 回答
0

我建议 3. 1 和 2 的混合体。也就是说,将您已经知道并且您知道您将经常查询的核心字段放入主表中。然后添加键值表以获得更模糊或扩展的属性。我认为这种方法平衡了保持表宽度相对较窄和最小化基本查询所需的连接数量的竞争目标。

您可以考虑替代或结合上述方法的另一种方法是某种 ETL 过程。也许您将键值表定义为应用程序添加数据的便捷方式;然后设置复制、触发器和/或每晚/每小时存储过程,以将数据转换为更适合查询和报告目的的形式。

确切的最佳方法应通过仔细规划和考虑应用程序的整个架构来确定。

于 2012-06-25T05:11:11.120 回答