|
Внешний ключ. Возможно ли создать?
|
|||
---|---|---|---|
#18+
Есть 3 таблицы. Из 3 таблиц - 2 справочника. В 3-й таблице есть 2 поля - id и type. В зависимости от type, в поле id содержится значение или из 1-го справочника или 2-го справочника. Есть ли возможность создать foreign key в 3-й таблице на поле id? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2020, 23:50 |
|
Внешний ключ. Возможно ли создать?
|
|||
---|---|---|---|
#18+
Добавьте два поля nullable каждое ссылается на свой справочник плюс чек констрайнт чтобы заполнено было только одно (в зависимости от type) ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2020, 06:47 |
|
Внешний ключ. Возможно ли создать?
|
|||
---|---|---|---|
#18+
А вам зачем? Какой именно цели вы хотите добиться? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2020, 09:46 |
|
Внешний ключ. Возможно ли создать?
|
|||
---|---|---|---|
#18+
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 ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2020, 14:52 |
|
Внешний ключ. Возможно ли создать?
|
|||
---|---|---|---|
#18+
uaggster А вам зачем? Какой именно цели вы хотите добиться? зы: можно триггерами, но нет 100% гарантии и геморрой постоянный ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2020, 16:02 |
|
Внешний ключ. Возможно ли создать?
|
|||
---|---|---|---|
#18+
можно сделать промежуточную таблицу с полями и Pk(type, id) и актуализировать ее триггерами, а на нее FK... а оно вам точно надо? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2020, 16:11 |
|
Внешний ключ. Возможно ли создать?
|
|||
---|---|---|---|
#18+
andreymx можно триггерами Зачем, если выше я показал, как это сделать через persisted calculated fields? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2020, 16:13 |
|
Внешний ключ. Возможно ли создать?
|
|||
---|---|---|---|
#18+
ptr128 andreymx можно триггерами Зачем, если выше я показал, как это сделать через persisted calculated fields? Срауне вник ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2020, 17:06 |
|
Внешний ключ. Возможно ли создать?
|
|||
---|---|---|---|
#18+
NewIvanovec, авторВ зависимости от type, в поле id содержится значение или из 1-го справочника или 2-го справочника. Это плохое решение, т.к. при такой конфигурации понятие внешнего ключа теряет смысл. Данные, ключ которых определен в различных внешних источниках и храниться должны раздельно. Только с этом случае можно гарантировать целостность данных реляционными средствами. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2020, 19:47 |
|
|
start [/forum/topic.php?fid=46&fpage=38&tid=1685238]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
54ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 168ms |
0 / 0 |