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

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

Есть ли возможность создать foreign key в 3-й таблице на поле id?
...
Рейтинг: 0 / 0
31.12.2020, 06:47
    #40032801
SERG1257
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Внешний ключ. Возможно ли создать?
Добавьте два поля nullable каждое ссылается на свой справочник плюс чек констрайнт чтобы заполнено было только одно (в зависимости от type)
...
Рейтинг: 0 / 0
31.12.2020, 09:46
    #40032806
uaggster
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Внешний ключ. Возможно ли создать?
А вам зачем?
Какой именно цели вы хотите добиться?
...
Рейтинг: 0 / 0
31.12.2020, 14:52
    #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
31.12.2020, 16:02
    #40032882
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Внешний ключ. Возможно ли создать?
uaggster
А вам зачем?
Какой именно цели вы хотите добиться?
хороший вопрос

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

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

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

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


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


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