16

ブログ アプリケーションのようなアプリケーションを作成する必要がある場合、データベース スキーマの作成は比較的簡単です。いくつかのテーブル、tblPosts、tblAttachments、tblCommets、tblBlaBla を作成する必要があります。

ユーザーが実行時にスキーマの一部を定義できるようにしたいアプリケーションがある場合はどうでしょうか。ユーザーがあらゆる種類のデータを記録できるアプリケーションを構築するとします。あるユーザーは自分の勤務時間 (startTime、endTime、プロジェクト ID、説明) を記録したいと考えており、次のユーザーは料理のレシピを収集したいと考えています。他のユーザーは、株価情報、赤ちゃんの週ごとの体重、毎月の食費、結果などを収集したいと考えています。好きなサッカーチームとか、考えられることならなんでも。

非常に異なる種類のデータをすべて保持するデータベースをどのように設計しますか? あらゆる種類のデータを保持できる汎用スキーマを作成しますか? ユーザー データ スキーマを反映した新しいテーブルを作成しますか? それとも、それを行うための別の優れたアイデアがありますか?

重要な場合: SQL Server / Entity Framework を使用する必要があります

4

9 に答える 9

5

Antony の回答のように、EAV テーブルがありますが、常に存在する既定の列 (およびクラス プロパティ) もあります。

ここにあなたが何を求めているかについての素晴らしい記事があります:)

追加のコメントとして、Linq2Sql を使用して数日でこのアプローチのプロトタイプを作成しましたが、これは実行可能なソリューションでした。あなたが Entity Framework について言及したことを考えると、バージョン 4 とそのPOCO サポートを見てみましょう。これは、EF スキーマを汚染することなくハイブリッド EAV モデルを挿入する良い方法だからです。

于 2009-05-29T02:26:21.427 に答える
3

表面的には、カスタムユーザーデータ用のCouchDBSimpleDBなどのスキーマレスまたはドキュメント指向のデータベースが理想的です。しかし、SQLとEF以外のものを使用できない場合、それはあまり役に立たないと思います。

于 2009-05-29T00:20:11.883 に答える
3

私はEntityFrameworkに精通していませんが、Entity-Attribute-Value(http://en.wikipedia.org/wiki/Entity-Attribute-Value_model)データベースモデルに傾倒します。

したがって、テーブルと列をその場で作成するのではなく、アプリが属性(または属性のコレクション)を作成してから、エンドユーザーが値を完成させます。

しかし、私が言ったように、私はEntity Frameworkがあなたのために何をすることになっているのかわかりません、そしてそれはあなたにこのアプローチをとらせることができないかもしれません。

于 2009-05-29T00:26:15.930 に答える
1

批判的なコメントではありませんが、これがドン・キホーテの聖杯タイプの問題の 1 つであることを指摘すると、時間を節約できるかもしれません。ユーザーフレンドリーなデータベース設計インターフェースを作成するために、おそらく 50 年以上にわたって絶え間ない探求が行われてきました。

私が考えることができる唯一の準成功例は、1. Excel (およびその前身)、2. Filemaker (オリジナルであり、現在のフレーバーではない)、および 3. (おそらく、しかし疑わしい) アクセスです。 . 最初の 2 つは、基本的に 1 つのテーブルに限定されていることに注意してください。

私たちの集合的な社会通念が障壁を打ち破るのに役立つとしたら、私は驚かれることでしょう。しかし、それは素晴らしいでしょう。

于 2009-05-29T03:22:33.030 に答える
0

私は彼らにSQLServerManagement Studioのコピーを渡して、「やめろ!」と言います。なぜホイール内でホイールを再発明するのですか?

于 2009-05-29T00:03:16.943 に答える
0

この投稿をチェックしてください。それはできますが、大変な作業です:) パフォーマンスが問題にならない場合は、xml ソリューションも機能しますが、それも大変な作業です。

于 2009-05-29T01:58:47.083 に答える