【发布时间】:2014-02-20 06:04:37
【问题描述】:
我正在尝试在 SQL 中存储有关对象的“动态”属性。例如,假设我有一个名为objs 的表,它有两列(id、name)。现在一些用户可能想要存储一个名为hocus 的属性,而其他用户可能想要存储一个名为pocus(甚至banana)的属性。真的什么都行。
我的想法是创建两个表,props 和 obj_props。 props 将有两列(id 和 prop_name),obj_props 将有(obj_id、prop_id 和 value)。
我唯一担心的是,如果有数百万个对象,每个对象都有 20-30 个属性,这似乎会产生很多开销。我知道我可以在obj_id 和prop_id 上的obj_props 中创建一个索引,但这仍然能够表现良好吗?对于这样的事情有更好的解决方案吗?我正在研究 MongoDB,但缺少连接令人沮丧。
【问题讨论】:
-
我建议搜索适合您的应用程序要求的 nosql db。您描述的方法是常见 EAV 反模式的变体。它可以用于少量的动态数据,但是当您拥有数百万个对象时,它的性能就很差了。
-
你看过hstore吗?
-
确实,我们已经使用 hstore 好几年了,它运行良好。从 pg9.3 开始,我们也使用了一些 JSON。
-
我之前没有听说过 hstore,但在做了一些研究之后,这看起来像是最终的出路,谢谢!
标签: sql postgresql many-to-many schema