Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Не получатся создать связь / 5 сообщений из 5, страница 1 из 1
01.09.2021, 10:35
    #40094273
bobo96
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получатся создать связь
Здравствуйте.
Объясните, почему не получается создать связь.
Имеется 3 таблицы: Пользователи, Объекты и Пользователи-Объекты.
Логика такая: при удалении пользователя в таблицу с Объектами подставляется NULL, а из таблицы Пользователи-Объекты запись\записи удаляются.
При удалении объекта удаляются записи из Пользователи-Объекты.
В итоге:
1. Связь "Пользователи - Пользователи-Объекты" создается нормально
2. Связь "Объекты - Пользователи-Объекты" создается нормально
3. Связь "Пользователи - Объекты" (выделена на картинке) НЕ создается: "Введение ограничения внешнего ключа (FOREIGN KEY) "FK_Labels_Objects_Users" для таблицы "Labels_Objects" может привести к появлению циклов или множественных каскадных путей. Укажите ON DELETE NO ACTION или ON UPDATE NO ACTION либо измените другие ограничения внешнего ключа (FOREIGN KEY)."
ПОЧЕМУ ? Ведь при удалении пользователя в таблицу с объектами подставляется NULL, а не идет удаление записи!
В упор не понимаю, в чем ошибка :(
...
Рейтинг: 0 / 0
01.09.2021, 10:52
    #40094280
bobo96
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получатся создать связь
p.s. В MySql сейчас проверил - все создается. Даже если связь "Пользователи - Объекты" изменить на каскадное удаление все ок!
Что mssql то хочет ?!
...
Рейтинг: 0 / 0
01.09.2021, 11:32
    #40094306
bobo96
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получатся создать связь
Если во всех правилах поставить "Правило обновления" - "Нет действия", то все ок.
В целом такой вариант устраивает, поэтому вопрос наверное закрыт.
...
Рейтинг: 0 / 0
01.09.2021, 11:52
    #40094316
spenov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получатся создать связь
сделал тест. работает

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
create table usr (usr int primary key not null, j int)

create table obj (obj int primary key not null, 
usr int references usr(usr) on delete set null,
j int)

create table usr_obj (usr_obj int primary key not null, 
usr int references usr(usr) on delete cascade,
obj int references obj(obj) on delete cascade)


insert usr values (1, 1), (2, 2)
insert obj values (1, 1, 1), (2, 2, 2)
insert usr_obj values (1, 1, 1), (2, 2, 2)


select * from usr
select * from obj
select * from usr_obj

delete usr where usr=1

select * from usr
select * from obj
select * from usr_obj
...
Рейтинг: 0 / 0
01.09.2021, 12:33
    #40094334
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получатся создать связь
bobo96,

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


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