【发布时间】:2012-10-10 04:46:37
【问题描述】:
我的数据库存储有关各种问题的用户统计信息。没有问题类型表,因此我没有在问题类型上使用连接表,而是将用户已完成的每种问题类型的用户统计信息存储在用户表中的序列化哈希映射中。显然,这导致了一些适当大小的用户行——我自己的用户的序列化统计信息大约是 950 个字符,我可以想象它们很容易增长到高级用户的 5 kb。
我从来没有在任何一本书中读过这么大的专栏示例。在我的表中有这么大/可变的列会极大地阻碍性能吗?我是否应该为问题类型添加一个表格,并将用户统计信息也设为一个单独的表格?
如果相关的话,我目前正在使用 PostgreSQL。
【问题讨论】:
-
什么意思:“我刚刚将用户完成的每种问题的用户统计信息存储在用户表中的序列化哈希中。” 哈希是一个不可逆的过程 - 您不能仅从哈希中恢复原始数据。您的意思是:“序列化结果的字节数组”?
-
我说的是 ruby 哈希 - 就像在哈希表中一样,而不是哈希函数。抱歉,如果不清楚,显然哈希函数的意义在于它们是不可逆的。
-
感谢您的回答!对于任何以我的知识水平进入此问题的人,我将总结一下我从每个人的 cmets 中学到的东西:(1)大列意味着您有很多无法查询的属性(例如,我无法查询所有用户) > 50% 的问题类型) - 违反原子性。 (2) 选择时整行都加载到内存中,因此当您不需要该列或选择许多用户时会产生很多开销。 (3) 如果您不需要查询数据,而当您需要其中的任何一个时,您需要大部分数据,那么大列还不错。
标签: database database-design relational-database database-schema