0

次のタイプのリストを保存する一般的な方法は次のとおりです。

array(
   'category'=>array(
      'key'=>'value',
      'key'=>'value'
    ),
   'category'=>array(
      'key'=>'value',
      'key'=>'value'
    )
);

これらのリストを保存するためのより効率的な方法は、lists.phpファイルまたは MySQL のシリアル化されたエントリでしょうか?

4

3 に答える 3

2

あなたのmysqlテーブル構造に依存します:

  • テーブルがNORMALIZED の場合、データをシリアライズして保存すると、正規化が壊れます。

しかし、それ以外に、カテゴリを格納するテーブルと、そのカテゴリを参照するキーと値のペアを格納するテーブルの 2 つのテーブルを作成しないでください。

CREATE TABLE Categories (
   CID INT,
   ***
   PRIMARY KEY (CID)
)ENGINE=InnoDB;

CREATE TABLE KeyValues (
   Category INT,
   Key varchar(100),
   Value varchar(100,
   FOREIGN KEY Category REFERENCES Categories(CID)
)ENGINE=InnoDB;

構造化に応じて、キー値テーブルをさらに正規化できます。テーブルを正規化しているかどうかに依存するため、意図的に主キーを選択しませんでした。自動インクリメントの主キーを追加しても問題ありません。

これにより、データの選択がより簡単かつ迅速になります。データをシリアル化したときに何らかの計算を行う必要がある場合は、最初に PHP 側で取得し、シリアル化を解除して、1 回のクエリで同じことができる計算を行う必要があります。

于 2013-02-01T21:00:53.847 に答える
1

mysql を使用することをお勧めします。これは保守が容易であり、配列全体をメモリにロードすることなく、必要な行を簡単に選択できます。mongoDB などの nosql データベースを使用することもできます。

于 2013-02-01T20:59:54.910 に答える
0

必要でない限り、データベースを使用しないでください。不要なオーバーヘッドや複雑さが追加され、新たな障害点が発生します。この場合、リストを PHP ソース配列としてエンコードします。実装が桁違いに速くなり、はるかに簡単になります。このコードを数秒で作成できます。この場合、データベースを使用する利点はないと思います。600 要素の配列を格納するために必要なオーバーヘッドはごくわずかです。後で配列が大きくなりすぎて合理的でないことがわかった場合、または頻繁に変更する必要がある場合は、それをデータベースに移動できます。オーバーエンジニアリングしないでください。

于 2013-02-01T21:15:53.070 に答える