12

1つのトランザクションに対して2つのレコードを保存しているテーブルTransactionsがあり、1つは借方記入とその他の貸方記入用です。

したがって、テーブルcreditAmount(Money)とに2つの列がありますdebitAmount(Money)

各行でいずれかの列がnullにならないテーブルレベルの制約が必要です。つまり、行#3creditAmountがnullの場合debitAmount、何らかの値を保持する必要があり、その逆も同様です。

レコードを行に挿入するときに同じことを確認するにはどうすればよいですか?

4

2 に答える 2

25

テーブルに CHECK制約を追加できます。

ALTER TABLE Transactions ADD CONSTRAINT CK_Transactions_DebitOrCreditExists
CHECK ((creditAmount IS NULL AND debitAmount IS NOT NULL) 
   OR (creditAmount IS NOT NULL AND debitAmount IS NULL))
于 2012-12-22T12:50:51.070 に答える
0

フロントエンド(アプリケーション)を介して処理している場合、クレジットとデビットの両方がnullであるという問題は発生しません。借方または貸方のいずれかに、少なくとも1つのエントリが挿入されます。

誰かがバックエンドを介して処理し、テーブルに値を直接挿入しているときに、制約を設定したいと思います。その場合、クリスは解決策を提案しました。

ただし、バックエンドから挿入している場合でも、借方でも貸方でもないときにトランザクションを記録する理由については説明していません。

于 2012-12-22T15:10:38.380 に答える