2009-07-17 5 views
3

У меня есть таблица, в которой хранятся платежи, и вы хотите убедиться, что способ оплаты - это кредитная карта, тогда поле типа карты должно быть IN ('Visa', 'MasterCard', 'Discover', 'American Экспресс '), однако, если метод оплаты не является кредитной картой, то поле типа карты должно быть NULL.Запрос на проверку ограничений SQL Server

Будет ли проверочное ограничение позволит мне использовать заявление, как это:

(method = 'CC' AND cardType IN ('Visa', 'MasterCard', 'Discover', 'American Express')) 
OR 
(method != 'CC' AND cardType = NULL) 

Я мог бы быть полностью покинуть базу с этим, так как ограничения должны быть возможно использовать только для проверки 1 поле (не уверен).

Также, если такое заявление разрешено, возможно, произойдут неблагоприятные последствия?

Edit: Я планирую в конечном итоге создать поле cardType и имею cardType в нашей таблице платежей в качестве внешнего ключа ... это просто то, что я имею в виду делать в то же время

ответ

3

Почему не только иностранный ключ в другую таблицу и разрешить нули?

Еще лучше было бы присвоить код карты в другой таблице и сохранить к ней ключ.

+0

+1 - определенно нормализовать структуру с помощью таблицы CardType для ссылки. например 50 000 платежей с «American Express», это 800 000 байт с текущей схемой, по сравнению с более чем 50000 байт для нормализованного подхода – AdaTheDev

+0

Мы планируем идти по этому маршруту. Это существующая структура, с которой я работаю, и пока я не смогу создать новую таблицу типов карт и не обновить существующие записи, о которых я думал об использовании ограничения проверки. –

+0

Несколько раз вы предпочитаете постоянные значения, а не другую таблицу, например, сопоставление с значение перечисления в приложении. – Shimmy

Смежные вопросы