私は長年リレーショナルデータベースをプログラミングしてきましたが、今では珍しくてトリッキーな問題に遭遇しました。
私は、(ユーザーが)非常に迅速かつ簡単に定義できるエンティティを必要とするアプリケーションを構築しています。これらのエンティティのインスタンスは、作成、更新、削除などが可能です。
私が考えることができる2つのオプションがあります。
オプション1-動的に作成されたテーブル
最初のオプションは、テーブルを動的に生成するエンジンを作成し、それらにデータを挿入することです。ただし、すべてのクエリも動的であるか、少なくとも動的に作成されたストアドプロシージャなどである必要があるため、これは非常に注意が必要です。
オプション2-エンティティ-キー-値パターン
これは私が考えることができる唯一の現実的なオプションであり、5つのテーブル構造があります。
EntityTypes
EntityTypeID int
EntityTypeName nvarchar(50)
エンティティ
EntityID int
EntityTypeID int
FieldTypes
FieldTypeID int
FieldTypeName nvarchar(50)
SQLtype int
FieldValues
EntityID int
FIeldID int
値nvarchar(MAX)
田畑
FieldID int
FieldName nvarchar(50)
FieldTypeID int
「FieldValues」テーブルはデータウェアハウスのファクトテーブルのように機能し、すべての挿入/更新は「Key / Value」テーブル値パラメーターを入力してこれをSPROCに渡すことで機能します(複数の挿入/更新を回避するため)。
すべてのテーブルに高度なインデックスが付けられ、データを取得するために多くの自己結合を実行することになります。
Key / Valueデータベースの悪さについて多くのことを読みましたが、この問題については、それでも最善のようです。
今私の質問!
- 誰かがこれらの2つのオプション以外の別のアプローチまたはパターンを提案できますか?
- オプション2は、中規模のデータセット(最大100万行)で実行可能でしょうか?
- 使用できるオプション2のさらなる最適化はありますか?
どんな方向性やアドバイスも大歓迎です!