powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Внешний ключ. Возможно ли создать?
9 сообщений из 9, страница 1 из 1
Внешний ключ. Возможно ли создать?
    #40032775
NewIvanovec
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть 3 таблицы.
Из 3 таблиц - 2 справочника.

В 3-й таблице есть 2 поля - id и type.
В зависимости от type, в поле id содержится значение или из 1-го справочника или 2-го справочника.

Есть ли возможность создать foreign key в 3-й таблице на поле id?
...
Рейтинг: 0 / 0
Внешний ключ. Возможно ли создать?
    #40032801
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добавьте два поля nullable каждое ссылается на свой справочник плюс чек констрайнт чтобы заполнено было только одно (в зависимости от type)
...
Рейтинг: 0 / 0
Внешний ключ. Возможно ли создать?
    #40032806
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А вам зачем?
Какой именно цели вы хотите добиться?
...
Рейтинг: 0 / 0
Внешний ключ. Возможно ли создать?
    #40032860
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NewIvanovec,

Правильно все же растащить по разным полям.
Как временное решение:

DROP TABLE IF EXISTS spr1
DROP TABLE IF EXISTS spr2
DROP TABLE IF EXISTS test
CREATE TABLE spr1 (ID int PRIMARY KEY CLUSTERED)
CREATE TABLE spr2 (ID int PRIMARY KEY CLUSTERED)
CREATE TABLE test (
Type tinyint,
ID int,
spr1_ID AS CASE WHEN Type=1 THEN ID ELSE NULL END PERSISTED,
spr2_ID AS CASE WHEN Type=2 THEN ID ELSE NULL END PERSISTED,
CONSTRAINT FK_test_spr1 FOREIGN KEY (spr1_ID) REFERENCES spr1(ID),
CONSTRAINT FK_test_spr2 FOREIGN KEY (spr2_ID) REFERENCES spr2(ID)
)

INSERT spr1(ID) VALUES (1),(2),(4),(8)
INSERT spr2(ID) VALUES (1),(3),(5),(7)
INSERT test(Type, ID) VALUES (1,1), (2,1), (1,4), (2,5)
-- OK
INSERT test(Type, ID) VALUES (2,4)
-- Failed
...
Рейтинг: 0 / 0
Внешний ключ. Возможно ли создать?
    #40032882
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uaggster
А вам зачем?
Какой именно цели вы хотите добиться?
хороший вопрос

зы: можно триггерами, но нет 100% гарантии и геморрой постоянный
...
Рейтинг: 0 / 0
Внешний ключ. Возможно ли создать?
    #40032884
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно сделать промежуточную таблицу с полями и Pk(type, id) и актуализировать ее триггерами, а на нее FK... а оно вам точно надо?
...
Рейтинг: 0 / 0
Внешний ключ. Возможно ли создать?
    #40032885
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx
можно триггерами

Зачем, если выше я показал, как это сделать через persisted calculated fields?
...
Рейтинг: 0 / 0
Внешний ключ. Возможно ли создать?
    #40032894
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ptr128
andreymx
можно триггерами

Зачем, если выше я показал, как это сделать через persisted calculated fields?
интересное решение
Срауне вник
...
Рейтинг: 0 / 0
Внешний ключ. Возможно ли создать?
    #40032910
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NewIvanovec,

авторВ зависимости от type, в поле id содержится значение или из 1-го справочника или 2-го справочника.


Это плохое решение, т.к. при такой конфигурации понятие внешнего ключа теряет смысл. Данные, ключ которых определен в различных внешних источниках и храниться должны раздельно. Только с этом случае можно гарантировать целостность данных реляционными средствами.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Внешний ключ. Возможно ли создать?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]