在 MySQL [PHP] 中存储出版物元数据的最佳实践

Best practices for storing the metadata of publications in MySQL [PHP]

我有一个包含各种类型(普通、类型 1、类型 2)的出版物的网站,每种类型都需要特殊数据。

我的问题是:

将这些 "special data" 存储在数据库中的最佳方法是什么?

1)为每种类型的出版物创建一个table。
2) 使用列 "post, key, value" 创建一个 table "posts_metadata" 并在其中保存所有类型。
3) 在 "posts" table 中创建一个 "metadata" 列,并使用 JSON 格式将 "specials data" 保存在其中。
4) 在 "posts" table 中创建一个 "metadata" 列,并使用 XML 格式将 "specials data" 保存在其中。

您认为最有效、最实用的选择是什么?

编辑#1:

数据示例:

正常:without "special data"

类型 1:

'trademark' => 'Volkswagen'
'model' => 'gol 1.6'
'color' => 'white'
'doors' => '3'
'kms' => '17000'
..etc..

类型 2:

'color' => 'green'
'size' => '15x10'
'status' => 'new'
..etc..

...更多类型...

如果您希望能够查询那些特殊数据字段,请选择选项 2。

如果您只想存储数据,请选择选项 3。根据数据的可能大小,我会为其创建一个额外的 table,并根据您的 mysql 版本给出json 数据类型的列,如果您需要验证等 https://dev.mysql.com/doc/refman/5.7/en/json.html.

不要使用选项 4,与 json 相比,xml 会产生过多的开销并且在这种情况下没有任何好处。