Как создать взаимоисключающие столбцы таблицы
у меня есть таблица транзакций, где я сохраняю две записи для одной транзакции, одну для дебетования и другого кредитования.
Итак, у меня есть два столбца в таблице 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, я не понимаю, почему я бы записать транзакцию, когда ни она Дебет и кредит.