Условные ограничения внешнего ключа SQL Server

Я испытываю затруднения при выяснении, как создать ограничение внешнего ключа. Моя модель данных фиксируется и из моего управления, она похожа на это:

CREATE TABLE Enquiry 
  (Enquiry_Ref INTEGER PRIMARY KEY CLUSTERED, Join_Ref INTEGER, EnquiryDate, EnquiryType...)

CREATE TABLE Contact 
  (Contact_Ref INTEGER PRIMARY KEY CLUSTERED, Surname, Forenames ....)

CREATE TABLE UniversalJoin 
  (Join_Ref INTEGER, Contact_Ref INTEGER, Rel_Type INTEGER)

Каждый Запрос имеет точно один Контакт. Ссылка между этими двумя является таблицей UniversalJoin где

Enquiry.Join_Ref = UniversalJoin.Join_Ref AND 
Rel_Type = 1 AND
UniversalJoin.Contact_Ref = Contact.Contact_Ref

Rel_Type отличается в зависимости от того, какова исходная таблица, таким образом, в случае Запроса, Rel_Type равняется 1, но для другой таблицы это установило бы на N.

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

CREATE TABLE Enquiry 
  ...
  CONSTRAINT FK_Foo 
  FOREIGN KEY (Join_Ref)
  REFERENCES UniversalJoin (JoinRef WHERE Rel_Type=1)
5
задан Steve 9 March 2010 в 12:41
поделиться

2 ответа

Вы не можете использовать условные или отфильтрованные внешние ключи в SQL Server

В этих случаях вы можете иметь несколько столбцов FK между (JoinRef, Rel_Type ) и установите ограничение проверки для Rel_Type в UniversalJoin, чтобы оно стало равным 1.

Однако я думаю, что вы пытаетесь создать строку с несколькими родителями, что невозможно.

4
ответ дан 14 December 2019 в 08:48
поделиться

Возможно, вы захотите взглянуть на Ограничения CHECK

Ограничения CHECK обеспечивают целостность домена, ограничивая значения. целостность домена, ограничивая значения, которые принимаются столбцом. Они похожи на ограничения FOREIGN KEY в том. что они контролируют значения, которые помещаются в столбец. Разница заключается в том. как они определяют, какие значения являются действительными: Ограничения FOREIGN KEY получают список допустимых значений из другой таблицы, а ограничения CHECK определяют допустимые значения из логического выражение, которое не основано на данных в другом столбце.

3
ответ дан 14 December 2019 в 08:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: