Как сформировать это ограничение SQL и работает ли оно наоборот? - PullRequest
0 голосов
/ 16 сентября 2010

Скажите, у меня есть "Таблица A":

Id | Col A
1    Z
2    I
3    Null

... и n номеров таблиц в этом формате:

Id | A_FK | OtherInfo
1    1      "Some info"
2    2      "Some more info"
3    3      "Blah"

... где A_FK - ссылка внешнего ключа на идентификатор таблицы А.

Итак, есть одна «Таблица A» и n номеров «Таблица B». Для этих таблиц "B" некоторые из них могут иметь любое существующее значение для A_FK (никаких ограничений не требуется). Другие таблицы "B" могут только ссылаться на значение A_FK, если соответствующая запись не имеет нулевого значения в столбце A.

Итак, мои вопросы:

  1. Как бы я написал ограничение, чтобы позаботиться об этом (я думаю, это довольно легко, мне просто никогда не приходилось писать, и я немного ленивый)?
  2. Ограничение работает наоборот? Скажем, я ввел запись в таблицу «B», и она связана с Id = 1 в таблице A (с ограничением для таблицы B). Это хорошо, потому что Col A для Таблицы A 1 = "Z". Будет ли ошибка, если я попытаюсь изменить «Z» на Null позднее?

Заранее спасибо.

1 Ответ

2 голосов
/ 16 сентября 2010

В TableA создайте уникальное ограничение для (ID, ColA), В таблицах, где «где соответствующая запись не имеет значения NULL в столбце A.», добавьте столбец ColA, убедитесь, что он не равен NULL, и есть ограничение FK, ссылающееся на это уникальное ограничение в TableA.

Это отвечает на оба ваших вопроса.

...