エントリ (キー=>値のペアのセット) をデータベースに保存したいのですが、キーはエントリごとに異なります。
(1) 各エントリのキーと (2) 各エントリの特定のキーの値の 2 つのテーブルで保存することを考えました。エントリは両方のテーブルで共通の id フィールドを共有しますが、プルする方法がわかりませんこの種の構成では、SQL のキー => 値ペアとしてのエントリ。
より良い方法はありますか?これが sqlite で不可能な場合、mysql で可能ですか? ありがとう!
エントリ (キー=>値のペアのセット) をデータベースに保存したいのですが、キーはエントリごとに異なります。
(1) 各エントリのキーと (2) 各エントリの特定のキーの値の 2 つのテーブルで保存することを考えました。エントリは両方のテーブルで共通の id フィールドを共有しますが、プルする方法がわかりませんこの種の構成では、SQL のキー => 値ペアとしてのエントリ。
より良い方法はありますか?これが sqlite で不可能な場合、mysql で可能ですか? ありがとう!
Entity-Attribute-Value モデルを探しているようです。
別の方法としては、エンティティの種類ごとに異なるテーブルを作成するか、考えられるすべてのキーの列を含むテーブルを作成し、そのキーを持たないエンティティの値を NULL に設定します。
Bill KarwinのプレゼンテーションSQL Antipatternsを参照してください。彼は、EAV モデルの長所と短所をいくつか取り上げ、可能な代替案を提案しています。該当部分はスライド 16 からです。
@Mark Byers は正しいです。これは EAV モデルです。その暗い道を進む前に、Bad CarMaを読む必要があります。これは、このデータベース設計が事実上会社を破壊したという話です。
リレーショナル データベースでは、関係のすべての行に同じ列が含まれている必要があります。これは関係の定義の一部です。これは、SQLite、MySQL、またはその他のリレーショナル データベースに当てはまります。
また、私のプレゼンテーションPractical Object-Oriented Models in SQLや私の著書SQL Antipatternsも参照してください。この本では、EAV モデルによって引き起こされる問題を示しています。
エンティティごとに可変列が必要な場合は、非リレーショナル データベースが必要です。人気が高まっているCouchDBやMongoDBなどのドキュメント指向のデータベースがあります。
または、SQLite のような組み込み可能なシングルユーザー ソリューションが必要な場合は、Berkeley DBを試してください。