2017-01-30 31 views
-2

引用用のアプリケーションを開発中です。まず、原価を下げる(または計算する)ようにします。その結果に基づいて、見積に商品を追加します。問題は、私は多くの製品を持っているので、製品の各カテゴリは、独自のコストブレークダウンフォームを別のパラメータを記入する必要があります。私はコストの内訳のための唯一のテーブルを持っている場合は、テーブル内のフィールドの数)。私はこれが正しいアプローチではないと感じています。だから私は、次の図を思い付いた:複数のテーブル(主キー)に1つの外部キーを接続

My diagram

は、このソリューションでも可能です、または私は「N」を持っている必要があり、各コスト打破テーブルごとに異なるFK(私はN-テーブルを持っている場合)?もっと良い解決策はありますか?

リンクテーブル「Quotation_QtnDetail」が必要な場合は別の質問がありますか?

+0

すべての計算テーブルで1-1の関係を持つ別のテーブルを使用します。外部キーのプライマリキーテーブルとしてこのテーブルを使用します。多くのテーブルを1-1の関係に接続するのは簡単ですが、1-mの関係には接続できません。 –

答えて

0

CalculationType列に、レコードがどのテーブルにあるかを示す列と、関連するレコードのIDを含む汎用参照ID列を格納することによって、これらのテーブルの1つに特定の値への参照を格納することができます。 。たとえば、CalcIdの123とCalculationTypeの2を格納していた場合、これはCalc2テーブルのID 123のレコードを指しています。

これを行うことの欠点は、FK制約を使用してデータを検証する機能が失われ、計算テーブルへの結合がもう少し複雑になることです。

Quotation_QtnDetailテーブルに関しては、レコードを複数のレコードにリンクすることができない限り、この追加のリンクテーブルは必要ありません。代わりに、QtnId列をQtnDetailテーブルに追加して直接リンクしてください。同様に、アイテムが1つの計算レコードにのみリンクされている場合は、Calc_QtnItmテーブルを削除することもできます。

+0

ありがとうございます。 CalculationTypeであなたのソリューションを使用します。しかし、どうすればSQLクエリでそれを管理できますか? CASE文を使用しますか? – Urban

+0

あなたが何をする必要があるかによって異なります。すべてのテーブルを結合したままにすることができます(たとえば、LEFT JOIN Calc1 ON Calc1.CalLinkId = Calc_QtnItm.CalcId AND Calc_QtnItem.CalculationType = 1).NULL値を多く選択すると、アプリケーションに別のクエリを実行させることができますCalc_QtnItem.CalculationTypeに基づいて関連テーブルからcalc情報を取得します。 – Sam

関連する問題