質問

レポートには複数のチャートを含めることができます。 グラフの表は次のとおりです。

  • チャート- Id ChartId ReportId 、...

上記の ChartId は、 ChartId から次のいずれかの ChartId にマッピングできます。

  • ChartId 厚さ YAxis XAxis 、...
  • パイ ChartId 半径、...
  • バー ChartId Width Color Border 、.. 。

SQL Serverを使用していますが、残念ながらCouchDBなどの代替ソリューションは実行可能なオプションではありません。また、Entity Frameworkを使用してこれらのテーブルをエンティティにマップする予定です。

この設計は最初の突き刺しであり、この設計には複数の問題があります:

  1. グラフ ReportId は複数のテーブルの外部キーにはできないため、FKを強制することは問題です。
  2. SQL(またはLinq)クエリを実行する場合、2つのクエリを実行してチャートタイプを取得し、そのテーブルをクエリする必要があります。または、グラフデータを取得するには、すべてのテーブルに対して join を実行する必要があります。
  3. グラフタイプに対して結合を行う場合、これらのテーブルの ChartId は一意である必要があるため、 Chart ChartId は1つのみにマッピングされます Line ChartId または Bar ChartId または Pie ChartId
  4. EFでこれをマッピングするのは難しいでしょう。

これは十分に一般的な問題であり、処方された解決策とそれを処理する確立された方法があると思います。

デザインの正しい道を進んでいますか?その場合、上記の問題(FK、結合、複数のテーブルにわたる一意のID、マッピング)を克服する方法。

解決策

この回答は戦略について非常に包括的なものです。 SQLチームの SQL Serverでのテーブル継承の実装希望の場所に来ました。

役に立ちましたか?

解決

チャートを同じテーブルに配置し、 Table perを使用することを検討したか階層継承パターン?そこのリンクは、Entity Frameworkでこれを実装する方法を示しています。実行可能かどうかは、それらすべてのチャートタイプがどれだけ異なるか、およびそれぞれが必要とするフィールドの数に依存します。

タイプごとのテーブルの継承もあります。すでに説明しているものに。

他のヒント

テーブル継承スキームでこれに取り組みます:

Chart (ChartId, ChartTypeId)
   PK (ChartId, ChartTypeId)
   CHECK ChartTypeId IN ('Line', 'Bar', 'Pie')

LineChart (ChartId, ChartTypeId)
   PK (ChartId, ChartTypeId)
   FK (ChartId, ChartTypeId) -> Chart
   CHECK ChartTypeId IN ('Line')

チャートを追加するには、まず「ベース」に追加します;チャート表、そして適切な「サブタイプ」へチャート表。チェック制約により、すべてが揃っています。

折れ線グラフ。円グラフ、および棒グラフは、グラフの特殊な形式です。

ルックアップ"一般化専門化リレーショナルモデリング"このパターンに関する優れた記事。

  

または、結合を実行する必要があります   チャートデータを取得するためのすべてのテーブル。

はい、それで構いません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top