2016-06-15 15 views
1

私は様々なタイプ(ノーマル、タイプ1、タイプ2)の出版物のウェブサイトを持っており、それぞれのタイプには特別なデータが必要です。パブリケーションのメタデータをMySQLに保存するためのベストプラクティス[PHP]

私の質問は:

は、データベース内のこれらの「特殊なデータ」を保存するための最良の方法は何ですか?

1)パブリケーションの種類ごとにテーブルを作成します。
2) "post、key、value"という列を持つ "posts_metadata"という表を作成し、すべての型をその中に保存します。
3) "posts"テーブルに "metadata"カラムを作成し、JSONフォーマットを使用して "specials data"を保存します。
4) "posts"テーブルに "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.. 

...もっと種類...

+0

データの例が必要です – bassxzero

+0

@bassxzero編集 – Manux22

答えて

1

あなたは照会できるようにしたい場合は、データのみの保存が依存オプション3を選択したい場合は、それらの特殊なデータフィールドは、オプション2

を選択の上データの可能なサイズは私はそれのための余分なテーブルを作成し、mysqlのバージョンに応じて、あなたが検証などが必要な場合は、列jsonのデータ型を与えるhttps://dev.mysql.com/doc/refman/5.7/en/json.html

json xmlと比較してオプション4は使用しないでください。オーバーヘッドが大きくなり、このシナリオではメリットがありません。

+0

しかし、10個の "特別なデータ"を保存する必要がある場合は、10個のINSERTクエリを実行する必要があります。 – Manux22

+0

通常の方法です。データを挿入するために[prepared statements](http://php.net/manual/en/pdo.prepare.php)を使用すると良いでしょう。データベースは一度だけクエリを解析すればよいからです解析されたクエリを他の値で簡単に実行することができます。別の方法は、複数の挿入を使用することです。このINSERT INTO表(列)VALUES(1)(2)(3)のような挿入文を作成するだけです。オプション2の利点は、これらのフィールドの削除、更新、および選択の容易性です。 – Philipp

+0

オプション2を使用すると、キーが存在する場合は更新に問題があり、更新する必要があります。存在しない場合は挿入する必要がありますが、既存のキーを特定できないため設定できません'meta_key'列はUNIQUEとして他の行に繰り返し表示される可能性があります。 – Manux22

関連する問題