MySQL:Key-Value vs. Null Columns,用于创建列数未知的表

时间:2012-06-25 05:03:18

标签: mysql

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

我已经查看了StackOverflow的类似问题,但它通常最终会让提问者不正确地设计他的表。

基于StackOverflow的内容,我应该:

  1. 创建一个包含许多空列的表,并在需要时使用它们(这对我来说似乎很糟糕)
  2. 创建用户表和信息表,其中信息是键值对:[user_id,key,value]
  3. 你能建议别的什么吗?
  4. 请记住这是针对MySQL数据库的,所以我理解不喜欢关系数据库上的Key-Value表。

    感谢。

2 个答案:

答案 0 :(得分:0)

嗯,我对这个问题感到有点困惑,但听起来你想要为一个用户提供很多属性吗?而在未来你想要添加更多? 那么,是不是只有某种customer_attribute_ref ref表,然后你可以通过插入ref表轻松添加更多,然后在customer表中你至少有三列:1。customer ID 2. customer attribute ID 3.客户属性值...

可能是我错过了你的问题。你能说清楚吗

答案 1 :(得分:0)

我建议3.混合使用1和2.也就是说,将已知的核心字段放入主表中,并且知道您将经常查询。然后为更隐蔽或扩展的属性添加键值表。我认为这种方法可以平衡保持表格宽度相对较窄的竞争目标,并最大限度地减少基本查询所需的连接数。

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

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