Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> INSERT and UPDATE specification, Выставить корректные значения 
V
    Опции темы
amarenkov
Дата 30.6.2009, 07:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 21.2.2008
Где: Воронеж

Репутация: нет
Всего: нет



Добрый день.

СУБД: MS SQL Server 2008 Express.

Есть дочерняя таблица, у которой два поля ссылаются на родительскую таблицу. Связь 0..1 - n. На обеих связях ставлю INSERT and UPDATE specification следующим образом: Delete rule - Set NULL, Update Rule - Cascade. 

Microsoft SQL Server Management Studio генерирует ошибку: "- Unable to create relationship ...  Introducing FOREIGN KEY constraint ... on table ... may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints."

Я не могу понять, каким образом могут получиться циклы и чем страшны множественные каскадные пути? И как мне иначе при удалении родительской записи поля в дочерней выставить в NULL?

Заранее спасибо smile.
PM MAIL ICQ   Вверх
Idsa
Дата 30.6.2009, 07:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: нет
Всего: 62



amarenkov, переношу тему в профильный раздел. Насколько я знаю, в SQL Server эту проблему можно разрулить только при помощи тригеров.


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
Itsys
Дата 30.6.2009, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

Репутация: 1
Всего: 34



amarenkov, 

Я из описания не понял ничего... Лучше напиши чего ты хочешь добиться.
PM MAIL WWW Skype   Вверх
amarenkov
Дата 1.7.2009, 08:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 21.2.2008
Где: Воронеж

Репутация: нет
Всего: нет



Itsys, легко smile.

Есть таблица шапки организации (наименование, инн, адресс). Есть таблица организаций-плательщиков (много разных полей). Во второй таблице есть так же поля: Организация-правопередатчик и Вышестоящая организация. Эти поля ссылаются на первую таблицу. 

Так вот, мне необходимо, чтобы при удалении из первой таблицы эти два поля во второй становились NULL.

Но в Delete Rule для этих двух связей выставить Set NULL не получается - ошибка (в первом посте ее текст).
PM MAIL ICQ   Вверх
Idsa
Дата 1.7.2009, 08:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: нет
Всего: 62



Некоторое время назад сам интересовался этим вопросом на sql.ru: http://www.sql.ru/forum/actualthread.aspx?tid=645122


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
amarenkov
Дата 1.7.2009, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 21.2.2008
Где: Воронеж

Репутация: нет
Всего: нет



Idsa, спасибо smile. Похоже, тоже придется делать триггером... Совсем это не дело ;).
PM MAIL ICQ   Вверх
thomas
Дата 1.7.2009, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент... почти
***


Профиль
Группа: Завсегдатай
Сообщений: 1385
Регистрация: 3.10.2006
Где: " Сказочное королевство"

Репутация: нет
Всего: 65



amarenkov, Приветствую.
А вот это 
Цитата

Есть дочерняя таблица, у которой два поля ссылаются на родительскую таблицу.
как понимать?
Вы там при проектировании своей БД ничего не напутали и не перемудрили?
Подумайте еще раз какие данные должны у Вас сохраняться в БД и проведите НОРМАЛИЗАЦИЮ, скорее всего проблемы отпадут.
И еще раз обдумайте бизнес-процесс. Если необходимость удалять "шапку", когда есть дочерние записи? Если да, то удалять надо в обоих таблицах, если нет, то помечать запись о "шапке" как не активную.
У меня на пример так сделано по клиентуре с их фактурами и  по фактурам с товарами в них. Даже если клиента больше нет, то фактуры то остались и соответственно если товара нет, то фактуры то есть.

Ну а если уж у вас такая "хитрая" бизнес логика, то триггер самое то.


--------------------
Крепко жму горло, искренне ваш Thomas. (С)vingrad
Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну!
Проблемы негров шерифа не волнуют.
PM MAIL   Вверх
amarenkov
Дата 1.7.2009, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 21.2.2008
Где: Воронеж

Репутация: нет
Всего: нет



thomas, да нет, ничего не намудрил, и нормализация здесь не нужна. У Idsa почти такой же пример, посмотрите, если мой непонятен.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS SQL"
Akina

Akina

Запрещается!

Публиковать ссылки и обсуждать взлом чего бы то ни было.

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы составления неспецифических запросов рассматриваются здесь
  • Используйте теги [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS SQL Server | Следующая тема »


 




[ Время генерации скрипта: 0.1614 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.