powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Не получатся создать связь
5 сообщений из 5, страница 1 из 1
Не получатся создать связь
    #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
Не получатся создать связь
    #40094280
bobo96
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
p.s. В MySql сейчас проверил - все создается. Даже если связь "Пользователи - Объекты" изменить на каскадное удаление все ок!
Что mssql то хочет ?!
...
Рейтинг: 0 / 0
Не получатся создать связь
    #40094306
bobo96
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если во всех правилах поставить "Правило обновления" - "Нет действия", то все ок.
В целом такой вариант устраивает, поэтому вопрос наверное закрыт.
...
Рейтинг: 0 / 0
Не получатся создать связь
    #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
Не получатся создать связь
    #40094334
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bobo96,

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


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