У меня есть следующие таблицы в базе данных SQL Server 2008:
tblItem , в котором есть поле ItemID ;
tblGoodItem , который также имеет поле ItemID и внешний ключ, указывающий на tblItem;
tblBadItem , который также имеет поле ItemID и внешний ключ, указывающий на tblItem.
Элемент не может быть одновременно хороший предмет и плохой предмет; это должно быть либо одно, либо другое. Однако вне зависимости от того, хороший это элемент или плохой, он должен быть элементом.
У меня такой вопрос: как мне добавить ограничение в поля ItemID в tblGoodItem и tblBadItem, чтобы значение ItemID не могло существовать в обе таблицы ?
Я прочитал несколько ответов в Stack Overflow на похожие вопросы и думаю об этом решении:
Создайте представление vwItem , которое присоединяется к tblGoodItem на tblBadItem на ItemID.
Напишите UDF fnItem , который выполняет запрос к vwItem, чтобы узнать, сколько записей существует в представлении.
Есть ограничение, которое вызывает fnItem и проверяет, что возвращаемое значение равно 0.
Это лучшая идея? У кого-нибудь есть идея получше?