【问题标题】:Storing a serialized array in the database an anti pattern? Rails在数据库中存储序列化数组是一种反模式?导轨
【发布时间】:2018-01-28 03:23:13
【问题描述】:

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

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

可能需要检查对象是否具有特定编号。

永远不会更新它。

不会查询它。

有属性编号作为序列化?

有属于对象的表编号吗?

顺便说一句,我正在使用 rails 5.1 和 postgresql。

谢谢

【问题讨论】:

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


    【解决方案1】:

    由于您使用的是 PostgreSQL,实际上您还有第三种选择:使用数组列。

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

    t.integer :column_name, array: true
    

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

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

    我会远离serialize。这会将一团 YAML 扔到您的数据库中,并且 YAML 查询起来既困难又麻烦,更不用说在数据库内部进行操作了。

    【讨论】:

    • 是的,意外提交。谢谢。我删除了我的答案,并将删除此评论。
    猜你喜欢
    • 2016-09-17
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    • 1970-01-01
    • 1970-01-01
    • 2011-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多