Вопрос без объяснений:
Есть ли в любом случае ограничение 2 пустых значений, для которых всегда требуется 1, чтобы иметь значение? Например, два столбца даты, оба равны нулю, но имеют как минимум 1, для которого требуется значение
Описание проблемы:
Допустим, у меня есть таблица под названием Расход
и иметь 2 даты:
prevision_expense_expiration_date DATE NULLABLE расход_плата_date DATE NULLABLE
логика этих двух столбцов следующая:
Я сделал покупку чего-то, и я знаю, что должен заплатить за это, некоторая дата, как счет за телефон. Я введу это как расход с расходом_платы_даты. Эта дата является предполагаемой датой, которую я должен заплатить, но не фактической датой платежа, как дата истечения срока счета.
В другой ситуации я продаю подарочную карту какого-либо провайдера для его обслуживания. У меня могут быть расходы на покупку моему провайдеру услуг, переданных моему клиенту, только если клиент выкупает карту. Следовательно, у подарочной карты есть срок годности, я хочу сделать предвидение для этих «расходов», не вставляя в качестве расхода на время действия подарочной карты, если срок действия подарочной карты истекает, эти «расходы» не должны входить в счет система.
Я знаю, что у меня может быть две одинаковые таблицы с именами prevision_expense и Verified_expense, но это звучит неправильно, поэтому у меня в одной таблице две даты, допускающие нулевое значение, но я хочу ограничить или еще что-то, чтобы всегда требовалась одна.
Есть еще одна возможная стратегия:
payment_date DATE NOT NULL is_prevision_date BOOL NOT NULL
Таким образом, в этом случае, если дата предвидения, значение bool будет 1, в противном случае будет 0. Нет нулевых значений, все хорошо. за исключением того, что я хочу сохранить оба значения, когда у меня сначала есть дата предвидения, а у THEN (скажем, через два дня) есть подтвержденная дата для этих расходов, и в случае со стратегией 2 у меня такого варианта не будет.
Я делаю все неправильно в дизайне базы данных? : D
источник
CHECK
ограничением. Нет необходимости в постоянном столбце.CREATE TABLE Test_Constraint2 ( A DateTime Null, B DateTime Null, CONSTRAINT A_or_B_Not_Null CHECK (CASE WHEN A IS Null AND B IS Null THEN 0 ELSE 1 END = 1) )
Я нашел статью, которая выглядит как то же самое здесь
источник