我正在为我的项目规划一个新的数据库结构,现在我正在考虑将数据存储在json-field中,而不是创建一些连接表。
我知道,我不应该将数据存储到json字段中,我希望在WHERE,ORDER BY或类似命令中使用这些字段。但是关于简单的1:n文本数据是什么?
例如:
Table: cities
---------------
id int
name string
districts string (JSON-Decoded PHP-Array)
VS
Table: cities
---------------
id int
name string
Table: districts
---------------
id int
city_id int FK to Table cities
name string
这只是一个简单的例子,但可能有更复杂的结构,例如:
Table: cities
---------------
id int
name string
data string (JSON-Decoded PHP-Array)
// Where data is a json-decoded PHP-Array like this:
$city_1["data"] = array(
"districts" => array( 1 => "East District", 2 => "West District"),
"special_text1" => "This text exists only in 10% of the cities",
"special_text2" => "This text exists only in 1% of the cities"
);
$city_2["data"] = array(
"districts" => array( 1 => "South District", 2 => "West District", 3 => "Northern"),
"special_text1" => "This text exists only in 10% of the cities",
);
所以我的问题是:使用json解码字段是否存在问题,例如因为性能等问题?
答案 0 :(得分:0)
当您想对此数据进行查询时,在文本列中保存JSON数据不是一个很好的解决方案。
PostgreSQL在其JSON type列上启用了更多功能。
为了您的目的,最好使用MongoDB,其中JSON是存储数据的本地方式,它是无模式的,可以保存复杂的结构。您还可以轻松搜索其中的数据,这在JSON中作为MySQL数据库中的文本保存是不可能的。在Mongo中,您的数据可能如下所示:
{
_id: <ObjectId>,
name: "City Name",
data: {
"districts": [
{
id: 1,
name: "East District",
population: 12221,
...
},
{
id: 2,
name: "West District",
...
}
],
"special_text1" : "This text exists only in 10% of the cities",
"special_text2" : "This text exists only in 1% of the cities",
...
},
...
}