Как создать взаимоисключающие столбцы таблицы

у меня есть таблица транзакций, где я сохраняю две записи для одной транзакции, одну для дебетования и другого кредитования.

Итак, у меня есть два столбца в таблице creditAmount(Money) и debitAmount(Money).

Я хочу ограничение уровня таблицы, что любой из столбцов не является нулевым в каждой строке. т. е. если строка #3 creditAmount null тогда debitAmount должно содержать некоторое значение и наоборот.

как обеспечить то же самое при вставке записи в строку?

2 ответов


вы можете добавить проверить ограничение к таблице:

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))

Если вы обрабатываете через Front-end (ваше приложение), то проблема как кредита, так и дебета не возникнет. По крайней мере одна запись вставляется либо в дебет, либо в кредит.

Я думаю, вы хотите поставить ограничение, когда кто-то обрабатывает через back-end и напрямую вставляет значения в таблицу. В таком случае, Крис предложил решение.

но даже если вы вставляете из back-end, я не понимаю, почему я бы записать транзакцию, когда ни она Дебет и кредит.