有人可能会告诉我,如果在数据库中使用json(数组)来存储设置或首选项是一种常见做法。是否有任何陷阱?
答案 0 :(得分:1)
您可以使用varchar()
字段将JSON存储在MySQL(或任何其他数据库)中,以用于序列化格式。
执行此操作时,您将失去在表中存储数据的灵活性,因为数据库无法理解JSON对象中的不同“列”。通过检索用户的记录并解析JSON(可能在应用程序级别),您可以相对轻松地获得单个用户的首选项。但是,有效地提出诸如“有多少用户有选择权”之类的问题变得更加困难。
某些数据库本身支持JSON(例如自9.2版以来的Postgres)。在MySQL中,您可以获得具有类似功能的函数库(here是一个任意示例)。
如果您只有少数已知的首选项不会更改,那么创建一个表格,每个表格都有一列。如果您有许多首选项,并且用户可能只有一个子集,那么每个首选项可以存储一行。这样的UserPreferences
表将包含以下列:
这是一种实体属性值(EAV)数据存储。这具有能够轻松添加新偏好的灵活性。数据库还可以利用索引和其他技术来提高性能。但是,这种结构不如JSON灵活。
答案 1 :(得分:0)
你可以使用像MongoDB这样的基于JSON的数据库,然后它就是
答案 2 :(得分:0)
PHP中的Doctrine ORM 2还允许在DB中存储json:
json_array:使用将SQL CLOB映射到PHP数组的类型 json_encode()和json_decode()
参考:http://doctrine-orm.readthedocs.org/en/latest/reference/basic-mapping.html
如果你需要它,那就完全没问题了!
答案 3 :(得分:0)
https://dba.stackexchange.com/
可能会更好地提出问题话虽如此,根据我的经验,将json存储在nosql数据库中是很常见的。对于sql数据库,您需要将列声明为具有固定大小的varchar。你可以使它非常大以容纳大型json(当你有一个小的json字符串时会发生什么)。你可以选择使字段变小(当你有一个大的json字符串时会发生什么)。你可以看到这对于存储任意json是多么糟糕。如果您的json不是任意的,那么您应该在表中创建特定字段。
如果它是json字符串,还要考虑如何查询数据。