Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Проблема с Foreign Key  [new]
Машовец Антон
Member

Откуда:
Сообщений: 76
Добрый вечер! Вот столкнулся с такой проблемой в MS SQL:
Имею таблицу REF_MKB и REG_CHECK_MKB. В таблице REF_MKB имеется два поля ID (varchar 16) и NAME (varchar 140).
В таблице REG_CHECK_MKB три поля MKB_START и MKB_END.
На каждое поле MKB_START и MKB_END необходимо создать вторичный ключ на таблицу REF_MKB с правилам обновления и удаления Cascade.

На первое поле MKB_START ключ создается, на второе пишет вот такое сообщение:

Introducing FOREIGN KEY constraint 'FK_dbo_REG_CHECK_MKB_2' on table 'REG_CHECK_MKB' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.

Я так понимаю что SQL Server боится за зацикливание... Делал такую же конструкцию в базе FireBird и все прокатило. Подскажите как выйти из положения? Или может быть я что то не правильно делаю?

P.S. Никаких триггеров в таблицах нет.
27 мар 12, 23:41    [12324202]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с Foreign Key  [new]
Glory
Member

Откуда:
Сообщений: 104751
Машовец Антон
Подскажите как выйти из положения?

Сервер уже все написал
Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.
27 мар 12, 23:42    [12324207]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с Foreign Key  [new]
Машовец Антон
Member

Откуда:
Сообщений: 76
А как же тогда быть? Мне надо чтобы если изменился ID в REF_MKB то изменился и в REG_CHECK_MKB, а если удалился то конечно и удалилась запись в REG_CHECK_MKB. Мне кажется это логически правильным...
27 мар 12, 23:46    [12324213]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с Foreign Key  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Машовец Антон
А как же тогда быть? Мне надо чтобы если изменился ID в REF_MKB то изменился и в REG_CHECK_MKB, а если удалился то конечно и удалилась запись в REG_CHECK_MKB. Мне кажется это логически правильным...
Нельзя. By design.
27 мар 12, 23:49    [12324224]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с Foreign Key  [new]
Glory
Member

Откуда:
Сообщений: 104751
Машовец Антон
А как же тогда быть?

Пересматривать структуру

Машовец Антон
Мне надо чтобы если изменился ID в REF_MKB то изменился и в REG_CHECK_MKB, а если удалился то конечно и удалилась запись в REG_CHECK_MKB

Пишите ссылочную целостность на триггерах
27 мар 12, 23:50    [12324226]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с Foreign Key  [new]
Машовец Антон
Member

Откуда:
Сообщений: 76
Ну вот это для меня открытие... На FireBird главное схавал... а в MS SQL не хочет. Получается что я не могу создать два реквизита в таблицы с нормальными ключами на одну и туже таблицу? Вот это гемор....
Неужели так трудно понять... Что если удаление произошло по первому ключу то по второму уже удалять ничего не надо... Тупой MS SQL!!!
Буду писать тригеры...
27 мар 12, 23:57    [12324259]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с Foreign Key  [new]
Машовец Антон
Member

Откуда:
Сообщений: 76
[quot Glory]
Машовец Антон
А как же тогда быть?

Пересматривать структуру

Че тут пересматривать? три поля всего.
27 мар 12, 23:58    [12324262]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с Foreign Key  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Машовец Антон
Тупой MS SQL!!!

Используйте острый FireBird, и никаких проблем.
28 мар 12, 00:00    [12324271]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с Foreign Key  [new]
Glory
Member

Откуда:
Сообщений: 104751
Машовец Антон
Че тут пересматривать? три поля всего.

Значит их должно быть меньше.
28 мар 12, 00:02    [12324278]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с Foreign Key  [new]
Машовец Антон
Member

Откуда:
Сообщений: 76
Попытался просто создать два ключа с on update - cascade и on delete-no action. Эффект тот же. Получается что если у меня в таблице два реквизита ссылаются на один справочник, то я не могу сделать нормальные ключи?
Допустим у меня в таблице есть два поля:
Регион проживания
Регион страхования

Есть справочник регионов, получается что я на эти два поля не могу создать вторичные ключи с on update - cascade и on delete-no action???
И получается что у меня не правильная структура таблица :) Ну вы извините, но это бред.
28 мар 12, 00:11    [12324293]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с Foreign Key  [new]
Машовец Антон
Member

Откуда:
Сообщений: 76
Я думаю что так не должно быть...
28 мар 12, 00:12    [12324296]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с Foreign Key  [new]
invm
Member

Откуда: Москва
Сообщений: 9825
Машовец Антон,

Не пользуйтесь огульно каскадированием -- сэкономите нервы себе и деньги работодателю.
28 мар 12, 00:21    [12324318]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с Foreign Key  [new]
Машовец Антон
Member

Откуда:
Сообщений: 76
С каскадированием не было никаких проблем. Я считаю это нормально когда часть логики переносится на сервер SQL. Тем более целостность базы данных.
28 мар 12, 00:24    [12324323]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с Foreign Key  [new]
Glory
Member

Откуда:
Сообщений: 104751
Машовец Антон
Есть справочник регионов, получается что я на эти два поля не могу создать вторичные ключи с on update - cascade и on delete-no action???
И получается что у меня не правильная структура таблица :) Ну вы извините, но это бред.

Не все, что вы лично считаете логичным и правильным, является таковым
Если завтра появится еще Регион получения возмещения, то вы его тоже в столбец оформите ?
28 мар 12, 00:30    [12324337]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с Foreign Key  [new]
Машовец Антон
Member

Откуда:
Сообщений: 76
Glory
Машовец Антон
Есть справочник регионов, получается что я на эти два поля не могу создать вторичные ключи с on update - cascade и on delete-no action???
И получается что у меня не правильная структура таблица :) Ну вы извините, но это бред.

Не все, что вы лично считаете логичным и правильным, является таковым
Если завтра появится еще Регион получения возмещения, то вы его тоже в столбец оформите ?


Ну если он индивидуален для записи то конечно ДА. А вы предлагаете отдельную связанную таблицу строить?
28 мар 12, 00:38    [12324350]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с Foreign Key  [new]
Glory
Member

Откуда:
Сообщений: 104751
Машовец Антон
Ну если он индивидуален для записи то конечно ДА. А вы предлагаете отдельную связанную таблицу строить?

А разве она не положена по стандартной нормализации ?
Или вы какими то другими методами проектирования пользуетесь ?
28 мар 12, 00:40    [12324354]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с Foreign Key  [new]
Машовец Антон
Member

Откуда:
Сообщений: 76
Офигено мы пришли... В таблице с 3 полями, чтобы все было логично надо еще одну таблицу сделать :)
28 мар 12, 00:46    [12324369]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с Foreign Key  [new]
Glory
Member

Откуда:
Сообщений: 104751
Машовец Антон
Офигено мы пришли... В таблице с 3 полями, чтобы все было логично

Ваша личная логика - это ваше личное дело.
Только не надо думать, что она единственно правильная.
28 мар 12, 00:48    [12324374]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с Foreign Key  [new]
Машовец Антон
Member

Откуда:
Сообщений: 76
Тут дело не в логиге даже.
А в том что пишет MS SQL. Почему нельзя обновить два реквизита если меняется первичный ключ в таблице? Не пойму что тут сложного с точки MS SQL? Причем тут циклы или многократные каскады? Откуда они многократные или циклические?
28 мар 12, 00:53    [12324380]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с Foreign Key  [new]
Машовец Антон
Member

Откуда:
Сообщений: 76
Машовец Антон,
Я не пытаюсь убедить что MS SQL не прав... просто сейчас уже интересно понять его логику и разобраться.
MS SQL то тоже не дураки писали :). Конечно если это не баг... Я просто новичок в MS SQL и не знаю во всегда ли было такое ограничение у него.
28 мар 12, 00:55    [12324385]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с Foreign Key  [new]
invm
Member

Откуда: Москва
Сообщений: 9825
Машовец Антон,

Необходимость изменять первичный ключ, в большинстве случаев говорит об ошибке проектирования.
28 мар 12, 00:58    [12324389]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с Foreign Key  [new]
Glory
Member

Откуда:
Сообщений: 104751
Машовец Антон
Я просто новичок в MS SQL и не знаю во всегда ли было такое ограничение у него.

Тем не менее вы позволяете себе однозначные оценки продукта
Вместо того,например, чтобы прочитать об этих ограничениях в хелпе
28 мар 12, 01:08    [12324401]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с Foreign Key  [new]
Машовец Антон
Member

Откуда:
Сообщений: 76
invm
Машовец Антон,

Необходимость изменять первичный ключ, в большинстве случаев говорит об ошибке проектирования.


А первичный ключ тут причем??? В таблице REF_MKB первичный ключ один - ID. В таблице REG_CHECK_MKB его пока нет.
28 мар 12, 01:11    [12324406]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с Foreign Key  [new]
Glory
Member

Откуда:
Сообщений: 104751
Машовец Антон
А первичный ключ тут причем??? В таблице REF_MKB первичный ключ один - ID. В таблице REG_CHECK_MKB его пока нет

А для чего вам каскадные обновления тогда, если у вас ПК не меняется ?
28 мар 12, 01:15    [12324410]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с Foreign Key  [new]
Машовец Антон
Member

Откуда:
Сообщений: 76
Glory,

ПК может и не меняется, но элемент может удалиться....
28 мар 12, 01:21    [12324414]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить