【发布时间】:2021-11-28 10:04:30
【问题描述】:
我有一个存储 json 的列。我试图确保只有一组对象可以存储在此列中,如下面的 json 架构中所述。该模式正在工作,除了我能够将属性show 保存为字符串,而它应该被强制为布尔值。例如,[{"name"=>"primary_phone", "show"=> "some text"}] 保存正确,但不应该正确保存。如何强制 show 必须是布尔值?
{
"type": "array",
"items": {
"definitions": {
"name": { "type": "string" },
"show": {"type": "boolean"}
},
"required": ["name", "show"]
}
}
【问题讨论】:
-
框架挑战:如果您存储在 JSON 列中的数据具有已定义的架构,那么您到底为什么首先使用 JSON 列?你知道什么是自我验证吗?一个数据库表。
-
这将是一个 has_many/belongs_to 关系,并且对于我想要完成的工作效率低下。
-
这几乎可以肯定是过早优化的情况,但实际上从未成功。如果有的话,JSON 列往往会导致查询速度非常慢,因为它更难正确索引数据并导致非规范化。
-
我不需要根据json数据查询。我只需要获取它。
-
JSON 模式不仅仅适用于 API。将其用于存储验证是一个非常好的用例。
标签: ruby-on-rails json jsonschema json-schema-validator