С Новым годом! Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/47: Рейтинг темы: голосов - 47, средняя оценка - 4.94
 Аватар для elClair
0 / 0 / 2
Регистрация: 27.12.2013
Сообщений: 34

Ошибка при создании связи

08.06.2015, 06:32. Показов 9300. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нахожусь в диаграмме БД, создаю связь между таблицами от ПК к ВК, после пытаюсь сохранить, но черная магия не позволяет... Совершенно Не ясно в чем беда, если в этой же БД при тех же условиях (спецификации инсерт и апдейт правила - каскадно). Помогите, пожалуйста!


Таблица "Tasks" сохранена успешно
таблица "Reports"
- Не удалось создать связь "FK_Reports_Tasks1".
Введение ограничения внешнего ключа (FOREIGN KEY) "FK_Reports_Tasks1" для таблицы "Reports" может привести к появлению циклов или множественных каскадных путей. Укажите ON DELETE NO ACTION или ON UPDATE NO ACTION либо измените другие ограничения внешнего ключа (FOREIGN KEY).
Нельзя создать ограничение. См. предыдущие ошибки.

Далее:

T-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
26
27
28
29
/* Чтобы предотвратить возможность потери данных, необходимо внимательно просмотреть этот скрипт, прежде чем запускать его вне контекста конструктора баз данных.*/
BEGIN TRANSACTION
SET QUOTED_IDENTIFIER ON
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT
BEGIN TRANSACTION
GO
ALTER TABLE dbo.Tasks SET (LOCK_ESCALATION = TABLE)
GO
COMMIT
select Has_Perms_By_Name(N'dbo.Tasks', 'Object', 'ALTER') as ALT_Per, Has_Perms_By_Name(N'dbo.Tasks', 'Object', 'VIEW DEFINITION') as View_def_Per, Has_Perms_By_Name(N'dbo.Tasks', 'Object', 'CONTROL') as Contr_Per BEGIN TRANSACTION
GO
ALTER TABLE dbo.Reports ADD CONSTRAINT
    FK_Reports_Tasks1 FOREIGN KEY
    (
    TasksID
    ) REFERENCES dbo.Tasks
    (
    id
    ) ON UPDATE  CASCADE 
     ON DELETE  CASCADE 
    
GO
COMMIT
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.06.2015, 06:32
Ответы с готовыми решениями:

Ошибка при создании базы
Сообщение 1802, уровень 16, состояние 4, строка 1 Ошибка операции CREATE DATABASE. Некоторые из перечисленных имен файлов не были...

Ошибка при создании таблицы
Вот такая вот ошибка! Помогите пожалуйста

Ошибка при создании запроса
Здравствуйте,создаю таблицу CREATE TABLE CLIENT (ID_CLIENT INTEGER PRIMARY KEY CHECK (ID_CLIENT>1 AND ID_CLIENT<9999), FIO...

12
 Аватар для Metall_Version
2152 / 1289 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
08.06.2015, 08:57
Цитата Сообщение от elClair Посмотреть сообщение
Введение ограничения внешнего ключа (FOREIGN KEY) "FK_Reports_Tasks1" для таблицы "Reports" может привести к появлению циклов или множественных каскадных путей.
в ошбике все подробно описано в чем проблема
0
 Аватар для elClair
0 / 0 / 2
Регистрация: 27.12.2013
Сообщений: 34
08.06.2015, 09:11  [ТС]
Цитата Сообщение от Metall_Version Посмотреть сообщение
в ошбике все подробно описано в чем проблема
Ну тупая я. Убрала каскадные обновления - все работает, раз если идет автоматическая генерация ключа, то в принципе, оно и не надо. Но я не понимаю, почему возникнут циклы или множественные каскадные пути. И почему половина связей создалась спокойно, а остальные - нет.
0
1116 / 761 / 183
Регистрация: 27.11.2009
Сообщений: 2,272
08.06.2015, 11:38
А зачем там каждая команда в явных BEGIN TRANS - COMMIT TRANS?
Одиночные команды и так выполняются внутри неявных транзакций.
Последний COMMIT вообще без BEGIN TRAN - это ошибка.

Если сервер говорит, что FK приводит к циклическим ссылкам, то переубедить его не удастся.
Как говорит Microsoft, "By design"!
Даже несмотря на то, что никаких циклических ссылок вроде и быть не может.
Это давно известные приколы.
Придётся контролировать RI вручную, например, в триггере.

Кстати, а в таблице dbo.Tasks FOREIGN KEY есть?
А если есть, то не ссылается ли он на dbo.Reports часом?
0
 Аватар для elClair
0 / 0 / 2
Регистрация: 27.12.2013
Сообщений: 34
08.06.2015, 11:44  [ТС]
Цитата Сообщение от iap Посмотреть сообщение
А зачем там каждая команда в явных BEGIN TRANS - COMMIT TRANS?
Одиночные команды и так выполняются внутри неявных транзакций.
Последний COMMIT вообще без BEGIN TRAN - это ошибка.
Если сервер говорит, что FK приводит к циклическим ссылкам, то переубедить его не удастся.
Как говорит Microsoft, "By design"!
Даже несмотря на то, что никаких циклических ссылок вроде и быть не может.
Это давно известные приколы.
Придётся контролировать RI вручную, например, в триггере.
Все создавалось в диаграмме, как она создает, я даже не знаю. Вручную я почти ничего не делала.
Цитата Сообщение от iap Посмотреть сообщение
Кстати, а в таблице dbo.Tasks FOREIGN KEY есть?
А если есть, то не ссылается ли он на dbo.Reports часом?
Связь есть, ПК на ВК, вроде как оно и должно быть...
0
 Аватар для Metall_Version
2152 / 1289 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
08.06.2015, 12:23
elClair, покажите все таблицы, екстрасенсов тут нету, если MS говорит, значит там еще есть связь, тоже с каскадным удалением
0
 Аватар для elClair
0 / 0 / 2
Регистрация: 27.12.2013
Сообщений: 34
08.06.2015, 12:59  [ТС]
Все каскадные удаления/добавления я уже заменила на ноу экшен и оно заработало. Связи пересоздала. Мне не понятно насколько это плохо. Нужно ли заменить на естественные айди, или не критично.
0
 Аватар для Metall_Version
2152 / 1289 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
08.06.2015, 13:16
Цитата Сообщение от elClair Посмотреть сообщение
Мне не понятно насколько это плохо.
Циклическое каскадное удаление/обновление просто не допустимо, поэтому субд не дает это сделать.

Цитата Сообщение от elClair Посмотреть сообщение
Нужно ли заменить на естественные айди, или не критично.
что есть естественные айди?
0
 Аватар для elClair
0 / 0 / 2
Регистрация: 27.12.2013
Сообщений: 34
08.06.2015, 13:26  [ТС]
Цитата Сообщение от Metall_Version Посмотреть сообщение
Циклическое каскадное удаление/обновление просто не допустимо, поэтому субд не дает это сделать.
Так я и не пойму где он цикл нашел. В любом случае я переделываю БД, придется создавать кучу дополнительных таблиц, что бы бд была гибче и круче, посмотрю во что выльется. Попробую все руками настроить. Самый надежный способ.

Цитата Сообщение от Metall_Version Посмотреть сообщение
что есть естественные айди?
Номер паспорта, к примеру.
0
1116 / 761 / 183
Регистрация: 27.11.2009
Сообщений: 2,272
08.06.2015, 13:27
Цитата Сообщение от Metall_Version Посмотреть сообщение
Циклическое каскадное удаление/обновление просто не допустимо, поэтому субд не дает это сделать.
На самом деле есть ситуации, когда очевидно, что каскадное удаление/обновление
никаких циклов не создаёт, однако сервер утверждает обратное и не разрешает создать такие FK.
MS на своём сайте поддержки обычно отвечает, что это "by design", и точка.
Правда, непонятно, относится ли данная тема к такому случаю. Или и правда имеются циклические каскадные операции.
Цитата Сообщение от Metall_Version Посмотреть сообщение
что есть естественные айди?
В отличие от суррогатных, естественные ключи не генерируются сервером,
а имеют определённый смысл в реальном мире.
Например, "Серия и номер паспорта", "ИНН", "Фамилия, Имя, Отчество" и т.п.
Непонятно, правда, при чём тут естественные ключи.
0
 Аватар для elClair
0 / 0 / 2
Регистрация: 27.12.2013
Сообщений: 34
08.06.2015, 13:32  [ТС]
Можете описать ситуацию с созданием циклов? А то может я уперлась в свое понимание и не вижу очевидного.

Добавлено через 2 минуты
Цитата Сообщение от iap Посмотреть сообщение
В отличие от суррогатных, естественные ключи не генерируются сервером,
а имеют определённый смысл в реальном мире.
Например, "Серия и номер паспорта", "ИНН", "Фамилия, Имя, Отчество" и т.п.
Непонятно, правда, при чём тут естественные ключи.
Они должны быть уникальными все же. Я имела в виду не автогенерируемые. Все, что не автогенериуется, то считается естественными ключами(но может это в моих узких кругах такие понятия?)
0
 Аватар для Metall_Version
2152 / 1289 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
08.06.2015, 20:27
Цитата Сообщение от iap Посмотреть сообщение
На самом деле есть ситуации, когда очевидно, что каскадное удаление/обновление
никаких циклов не создаёт, однако сервер утверждает обратное и не разрешает создать такие FK.
да знаю, но это редко случается довольно, когда связей в базе много, видимо алгоритм нахождения циклических ссылок у них фиговый

Добавлено через 46 секунд
Цитата Сообщение от elClair Посмотреть сообщение
А то может я уперлась в свое понимание и не вижу очевидного.
Так может покажите базу данных, и вам скажут есть там циклы или нету
0
 Аватар для elClair
0 / 0 / 2
Регистрация: 27.12.2013
Сообщений: 34
09.06.2015, 12:56  [ТС]

Ну вот что получилось. Ошибок больше нет.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.06.2015, 12:56
Помогаю со студенческими работами здесь

Ошибка при создании процедуры
Пишу процедуру, которая расчитывает мощность сплит-системы и заносит это значение в одно из полей таблицы. Текст процедуры такой: ...

Ошибка при создании базы
Добрый день. Скажите,из-за чего при создании базы возникает вот такая ошибка:

Ошибка при создании таблиц
Всем привет, имею такой запрос (выполнял его несколько раз, но потом базу грохал) create database VUZ1 go CREATE TABLE FACULTY ...

Ошибка при создании запроса с Group by
Добрый день! Подскажите пожалуйста, как правильно подправить запрос, чтобы не было ошибки с group by SELECT g.from_psa_id...

Management Studio - ошибка при создании БД
При создании новой БД SQL Server 2014 Management Studio - ругается вот так http://s43.***********/i101/1506/34/8d352fbcf7fct.jpg


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru