Ruby on rails 如何在PostgreSQL数据库中存储类似散列的对象?
首先,一点信息。我的Rails应用程序有一个名为Ruby on rails 如何在PostgreSQL数据库中存储类似散列的对象?,ruby-on-rails,ruby-on-rails-3,postgresql,hstore,Ruby On Rails,Ruby On Rails 3,Postgresql,Hstore,首先,一点信息。我的Rails应用程序有一个名为Neo的模型,它依次具有在观察到的属性、ra和dec 然而,我现在发现我需要在Ruby中存储这些数据集(以类似Python的方式,它将是一个元组列表),这可能是一个列表列表 我怎样才能做到这一点?我不介意使用hstore,但我不介意,因为上面的文档很少。您可以使用更简单的,而不是hstore 或者,您可以为这些集合创建一个模型,然后在Neo上使用has_many,在新模型上使用属于。正如Guilherme Berger所指出的,1:many关系是建
Neo
的模型,它依次具有在观察到的属性、ra
和dec
然而,我现在发现我需要在Ruby中存储这些数据集(以类似Python的方式,它将是一个元组列表),这可能是一个列表列表
我怎样才能做到这一点?我不介意使用hstore
,但我不介意,因为上面的文档很少。您可以使用更简单的,而不是hstore
或者,您可以为这些集合创建一个模型,然后在Neo上使用has_many
,在新模型上使用属于
。正如Guilherme Berger所指出的,1:many关系是建模“列表列表”的典型方式。。。或者更准确地说,是一组集合;为了给它排序,您必须在每个子表中定义某种排序键
使用PostgreSQL时,您可以选择的另一个选项是使用多维数组。不幸的是,Pg的数组有点奇怪,因为二维数组更像矩阵(即:固定维度),而不是列表列表。如果您的子列表长度相同,这很好,但是如果它们是可变的且长度无限,那么数组数组就不是一个好的选择
我提到这一点主要是为了完整性,并解释在数据库中序列化特定于语言的对象不是正确的方法。当您第一次必须更新到新的主要运行时版本、更改对象结构或从其他语言或报告引擎访问数据库时,情况会非常糟糕。我真的不建议这样做。最简单的方法是在一个由四列组成的表格中——三列表示“观测值”、“ra”和“dec”,第四列表示存储集合标识符。您对这些列使用的数据类型是什么?observed\u at
显然是一个日期ra
和dec
都是浮动。然而,每个Neo
都有多套。我现在想到了第二个选项。无论如何,谢谢你的帮助。我不太喜欢数据库中特定于语言的序列化对象。当您升级语言运行库或更改对象结构时,它们是一大难题,当您需要使用另一种语言、报告引擎等与数据库对话时,它们会让您非常沮丧。简单的1:m关系是一种更理智的方法。