У меня проблемы с подходящим ограничением в SQL Server 2005. Моя проблема связана со следующими таблицами:
Table PKTable
{
pk integer primary key,
property integer,
}
Table FKTable
{
pk integer primary key,
fk integer references PKTable(pk),
}
Я действительно хочу сделать невозможным существование записи fk_rec, когда запись PKTable, на которую она ссылается, имеет свойство = 5. Первое, что я попытался сделать, это создать представление с привязкой к схеме со следующим запросом и создать уникальный индекс для поля UniqueCol.
SELECT 'True' AS UniqueCol, 'uh oh' AS DiffCol
FROM FKTable INNER JOIN
PKTable ON FKTable.fk = PKTable.pk
WHERE PKTable.property = 5
UNION
SELECT 'True' AS UniqueCol, 'default' AS DiffCol
Таким образом, в принципе запись ('True', 'default') всегда будет существовать в представлении, и когда кто-то пытается вставить строку в FKTable, а запись PKTable, на которую он ссылается, имеет свойство = 5, я получаю нарушение ограничения потому что первая часть запроса объединения что-то вернет. Это была идея в любом случае. Но SQL Server 2005 не допускает индексы для представлений, которые включают объединение. Затем я попытался создать другое представление:
SELECT UniqueCol, DiffCol FROM TheViewAbove
Поместить уникальный индекс в UniqueCol в этом случае не удастся, потому что у вас не может быть индексов в представлении, которое ссылается на другое представление. Я знал, что это был длинный выстрел. Есть ли способ обойти это?
Спасибо!