2009-07-17 15 views
1

私は実際に整数値を持つ旅程項目のリストを持っています。私は50列のようにこれらのアイテムのそれぞれを使ってデータベースを作成することを考えていましたが、それは少し長めに見えました、そして旅程は変わるかもしれません。これらの名前=>値のペアをデータベースに格納するより良い方法はありますか?シリアライズは少し原油のようですが、名前、値の列を持つitinerary_items dbを作成し、そこでデータを固定することを考えていました。最高の解決策は何ですか?データベースに大きな配列を格納しています

答えて

5

テーブルのプロパティと同じように保存してみませんか?ソリューションのこの種類あるを使用してのアプローチで

| id| name  | value  | instance_key | 
+---+------------+--------------+--------------+ 
| 1 | array_key | array_value | 1   | 
| 2 | array_key2 | array_value2 | 1   | 
| 3 | array_key | array_value | 2   | 
| 4 | array_key2 | array_value2 | 2   | 

問題:それは1つが、アレイの複数のインスタンスを望んでいる場合は、1が常にインスタンスを追跡するための余分なキーを追加することができ

| id| name  | value  | 
+---+------------+--------------+ 
| 1 | array_key | array_value | 
| 2 | array_key2 | array_value2 | 

です人間が読めるデータの方がはるかに少ない傾向があり、オブジェクトに複数のプロパティがある場合は余分なジョインが多くなることがあります。

+0

これは私が念頭に置いたものですが、これが最善の解決策であるかどうかは分かりませんでした。 – brndnmg

+0

インスタンスを追跡するために余分なキーを追加すると、それらのインスタンスの名前を付け、おそらく各インスタンスの名前を付けます。 –

+0

共通foreign_key – brndnmg

2

キーの列と値の列があり、前述のようにレコードを挿入します。

2

保存しているデータがデータベースの検索に使用されておらず、アプリケーションコードでのみ更新されている場合は、それをblobとして保存するようにします。意味のある更新を行うためにその一部を更新し、完全なデータセットを読む必要がない場合は、id、user_id、key、valueなどのカラムを持つ別のテーブルがあります。

0

forループを作成してINSERT文を作成し、クエリを実行してキーと値の列を持つテーブルに配列を保存します。配列を再作成するには、テーブルから検索し、別のforループを使用して値を配列に挿入し直します。

この種類のセットアップでは、データベーステーブルがアレイの1つのインスタンスのみを表すことができるため、アレイの複数のインスタンスを保存し、これらのインスタンスをすべて保存する必要がある場合のみ問題があります。

複数のインスタンスを作成する予定の場合は、シリアル化してBLOBまたはTEXT列に格納することをお勧めします。

3

いくつのレコードがありますか?百人?何千?

レコード数が500件を下回っている場合は、データベースを選択する必要はありません。 XMLファイルに保存することができます。これらは、NoSQL :)の時です。

私は動きをサポートしていませんが、データベースはあなたの要件を過大視するようです。

0

I)は、PHP5のjson_encode()json_decodeを(使用して、過去にこの種のもののためにJSONを使用しました機能:http://uk.php.net/json_encode

あなたがする必要があるのは、データベース内のテキストフィールドを持っていますJSONでエンコードされた配列を挿入します。保存しているデータを検索する必要がない場合は、JSON文字列をPHP配列に簡単かつ素早く変換して必要に応じて出力できるので、データを格納する方法は非常に効率的です。

PHPはまだそれほど外部クラスが必要とされ、YAMLを解析するための関数のセットに内蔵されているようには見えないが、あなたはまた、YAMLになります:http://railsforphp.com/2008/01/08/php-meet-yaml/ http://railsforphp.com/2008/01/08/php-meet-yaml/

0

あなたの最善かつ最も簡単な方法は、使用することですシリアライズ。

+0

で最も単純なものは、「グループ化」されています(比喩的でSQLではありません)。多分。最初はベスト?いいえ! – brndnmg

+0

なぜそれはいいことではないでしょうか? –

関連する問題