2012-04-30 3 views
5

現在、私はプロジェクトで作業しています。今問題が発生する、私はデータベーステーブルの動的な列を処理する必要があります。アプリケーションからテーブルに新しい列を追加するときのデータベースデザインの問題

私はテーブルChargesを持っていますが、それぞれClientに対応する異なる料金の額が保存されます。この表には、今すぐ下記のcolumns-

Client_Id  Charge_1  Charge_2  Charge_3  Charge_4 

ていると仮定し、管理者がクライアントのためnew Charges以上を適用することができます。その場合、Chargesテーブルに新しい料金がcolumnとして追加されます。また、これはデータベース設計時ではなく、アプリケーション実行時に処理する必要があります。これは私の考えです。

しかし、私には適していません。

この問題を処理するための良いアイデアはありますか?私に提案してください。

ありがとうございます。私はこのデータベース設計では新しいです。

答えて

7

あなたは、次の列があり、元の料金表とあなたのクライアントのテーブルを維持し、クライアントの料金表で可能性すなわちClientCharges

、コンポジットテーブルを作成します。

ClientChargeId、ClientIdを、ChargeId

チャージテーブルでは追加を続けて(多くのチャージが必要です)、ChargeIdをClientChargesテーブルで参照できます。

CREATE TABLE ClientCharges 
(
    ClientChargeId   INT IDENTITY(1,1) 
    , ClientId    INT 
    , ChargeId    INT 
) 


INSERT INTO ClientCharges 
(ClientId, ChargeId) 
VALUES 
(1, 1), 
(1,2), 
(1,3), 
(1,4), 
(2,1), 
(3,1), 
(3,2), 
(4,3), 
(4,4) 
  • クライアント1はクライアント2がチャージ1
  • クライアント3は、図1及び図2
  • クライアント4は、電荷3,4
  • を有する電荷を有している料金1、2、3及び4
  • を有します

次に、ClientIdとChargeIdフィールドに外部キー制約を追加します。

+0

素晴らしいです。私はそれに取り組んでいます。 –

5

あなたが本当に望むように聞こえるのは、1対多数のテーブル関係です。

あなたは、Client_idとchargeという2つの列を持つテーブルを作成してから、料金ごとに新しい行を追加します。

これをどのように使用するのかはわかりません。これらの「請求」は個々の取引ですか?それとも、クライアントに関連付けられた課金タイプですか?いずれにしても、このようなデータモデルを変更するのは悪いフォームです。

これらの種類の繰り返しフィールドがある場合は、独自のテーブルにしてください。

関連する問題