0

開始したプロジェクト用にMySQLデータベースを設計しようとしていますが、それを行うための最良の方法がわかりません。

そのOOPシステムには、データベースに保存する必要のあるさまざまなタイプのオブジェクトが含まれています。ただし、これらのオブジェクトは、相互の親子関係を維持する必要もあります。また、システムの運用が開始されたら、新しいデータ型を簡単に追加できる柔軟性が必要です。

私が見る限り、3つのオプションがあります。1つは純粋なリレーショナル、もう1つはエンティティ属性値(EAVを正しく理解していません)、最後は自分で考えたハイブリッドデザインです。私はすでに以前に考えられていて、適切な名前を持っていると思います。

リレーショナル設計は、2つのテーブルで構成されます。1つは任意のタイプのオブジェクトを格納できる列を持つ大きなテーブルで、もう1つは最初のテーブルの行の親子関係を維持するためのテーブルです。

EAVデザインには2つのテーブルがあります。1つは3つの列(エンティティID、属性、値)を持つEAVテーブルで、2番目のテーブルはこれらのエンティティの親子関係を関連付けます。

ハイブリッド設計には、オブジェクトのタイプごとにテーブルがあり、次に親子関係テーブルがあり、親、子、およびこれらのIDの元となるテーブルのある種の識別子を格納する必要があります。

この問題はこれまでに何百回も取り組まれ、解決されたと確信しています。解決策について読むことができるように、参考資料をいただければ幸いです。

4

2 に答える 2

0

はい、EAV 設計をうまく使用できます。私たちが作成したアプリケーションでは機能しますが、約 3 年間の改良の後です。また、一般的なテーブル構造を使用して、オブジェクトのグループに特定のテーブルを使用することもできます。または、オブジェクトごとに 1 つの汎用テーブルを作成するだけです。オブジェクトがメタデータ リポジトリの一部であるテーブル。val_int、val_string 型の構造体を使用すると、値が格納されている場所以外に Null 列ができます。使用を検討できる MS SQL の疎行列機能があります。最近のディスクサイズはやや安くなっています。したがって、従来の構造に対する唯一の欠点は、N 行ではなく NxR 行 (オブジェクトの R 属性など) です。

それ以外に注意すべき点は、オブジェクト インスタンス GUID、動的 SQL 生成などです。

于 2013-06-01T16:24:54.310 に答える