Как получить контрольное ограничение, которое ссылается на другую таблицу?

У меня есть следующие таблицы в базе данных 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.

Это лучшая идея? У кого-нибудь есть идея получше?

7
задан OMG Ponies 16 September 2010 в 15:50
поделиться