在数据库中存储一个反模式的序列化数组?轨道

时间:2017-08-19 16:01:41

标签: ruby-on-rails arrays activerecord serialization anti-patterns

this other question中所述,您可以将序列化数据存储在数据库中。我想知道的是,如果我真的应该或只是创建一个简单的额外表格。

对象有一个相关数字列表。

可能需要检查一个对象是否有特定的数字。

永远不会更新它。

不要查询它。

将属性编号设为序列化?

是否有属于对象的表号?

BTW即时使用rails 5.1和postgresql。

由于

1 个答案:

答案 0 :(得分:1)

由于你正在使用PostgreSQL,你实际上有第三种选择:使用数组列。

创建列时添加array: true选项:

t.integer :column_name, array: true

然后model.column_name将是一个Ruby数组,您可以使用所有PostgreSQL array operators and functions来处理和查询数组。

我倾向于认为通常使用单独的表会更好,但是如果需要,数组列通常很方便并且很容易展开到单独的表中。

我远离serialize。这会将一大堆YAML抛入您的数据库,并且YAML很难查询,更不用说在数据库中进行操作。