powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / foreign key on update cascade
20 сообщений из 45, страница 2 из 2
foreign key on update cascade
    #39599992
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovПредлагаю разобраться: кто именно проектирует БД - ты или начальник
Начальник проектирует не во всех случаях, но вот каскадные FK для него - святое.
...
Рейтинг: 0 / 0
foreign key on update cascade
    #39599994
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PolesovТогда уж озвучь, как правильно.
Ограничение уникальности в данном случае не нужно. В лучшем случае его все будут тупо
обходить, в худшем - оно создаст проблемы и опять же его придётся обходить.

PolesovНачальник проектирует не во всех случаях, но вот каскадные FK для него - святое.

Раз "он начальник, ты дурак", то твоё дело маленькое - доложить ему о возникшей проблеме и
запросить инструкции по дальнейшему поведению.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
foreign key on update cascade
    #39599995
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ребята, вопрос был не о правильности структуры, а об ошибке каскадного обновления FK.
Выяснилось, что каскадное обновление такого FK технически не возможною
В принципе, тему можно считать закрытой.
...
Рейтинг: 0 / 0
foreign key on update cascade
    #39599996
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PolesovМожно ли сказать, что в системных таблицах FB поля RDB$RELATION_NAME, RDB$FIELD_NAME являются суррогатными, а не естественными ключами?
Нет. Это АЛЬТЕРНАТИВНЫЙ ключ.
Кроме того, не надо воспринимать структуру метаданных ФБ как образец для подражания. Между прочим, там констрейнтов вообще нет. Там есть только индексы, уникальные или нет.
Тем не менее, у RDB$RELATIONS есть RDB$RELATION_ID.
В общем, бывают БД без constraints. Редкий случай, но в таких системах целостность поддерживает нечто вроде трехзвенки, центрального сервера. В случае ФБ сам ФБ и есть этот "центральный сервер" для поддержки целостности в RDB$.
Конечно, можно было бы переделать эту структуру "красиво", но она была создана в середине 80х годов, и как я уже сказал выше, это не совсем прикладная модель БД.

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

Так что, первопричина проблем в данном случае - естественные ключи. О чем, как бы, пережевано уже лет тридцать. Если твой шеф (или еще кто-то) считает, что ЕК - это нормально (и вследствие - за каскадные обновления), то это просто означает, что он никогда не проектировал прикладные БД.
...
Рейтинг: 0 / 0
foreign key on update cascade
    #39599998
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvТак что, первопричина проблем в данном случае - естественные ключи
Да кто бы с этим спорил.
...
Рейтинг: 0 / 0
foreign key on update cascade
    #39600001
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PolesovРебята, вопрос был не о правильности структуры, а об ошибке каскадного обновления FK.
да ё-мое.
То есть, выходит, ФБ плохой, MS SQL плохой, а наша структура - хорошая?
Ошибка - это следствие кривости структуры. Если бы ты не напоролся на ошибку - и дальше использовал бы ЕК и каскадные апдейты?
...
Рейтинг: 0 / 0
foreign key on update cascade
    #39600002
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvТо есть, выходит, ФБ плохой, MS SQL плохой
MS SQL при попытке наложения такого каскадного FK ругается.

И, согласись, вопрос не стоял "я тут со своей гениальной структурой БД, а он...".
...
Рейтинг: 0 / 0
foreign key on update cascade
    #39600004
Уберите одно из вот этих FK:

alter table COST
add constraint FK_COST_DELIVERY
foreign key ( SUPPLIER, DELIVERY_NO )
references DELIVERY ( SUPPLIER, DELIVERY_NO ) on update cascade;

-xor-

alter table COST
add constraint FK_COST_PRODUCT
foreign key ( SUPPLIER, PRODUCT )
references PRODUCT ( SUPPLIER, PRODUCT ) on update cascade;

- и реализуйте обновление тех полей таблицы COST, что теперь без контроля со стороны FK, через after-update триггер его "бывшей" родительской таблицы.
...
Рейтинг: 0 / 0
foreign key on update cascade
    #39600007
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да кто его разберёт...Уберите одно из вот этих FK:

alter table COST
add constraint FK_COST_DELIVERY
foreign key ( SUPPLIER, DELIVERY_NO )
references DELIVERY ( SUPPLIER, DELIVERY_NO ) on update cascade;

-xor-

alter table COST
add constraint FK_COST_PRODUCT
foreign key ( SUPPLIER, PRODUCT )
references PRODUCT ( SUPPLIER, PRODUCT ) on update cascade;

- и реализуйте обновление тех полей таблицы COST, что теперь без контроля со стороны FK, через after-update триггер его "бывшей" родительской таблицы.

Ну, и ссылочную целостность по удаленному FK поддерживать тоже через триггер.
В принципе, да, но легче переделать схему на суррогатные ключи - тогда каскадное обновление вообще не потребуется.
...
Рейтинг: 0 / 0
foreign key on update cascade
    #39600013
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PolesovПривет.

Вопрос по каскадным обновлениям внешнего ключа.

Структура БД:

Таблица поставщиков:
...

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
/*
violation of FOREIGN KEY constraint "".
violation of FOREIGN KEY constraint "FK_COST_DELIVERY" on table "COST".
Foreign key reference target does not exist.
Problematic key value is ("SUPPLIER" = 'INTEL', "DELIVERY_NO" = 1).
At trigger 'CHECK_4'
At trigger 'CHECK_1'.
*/


...
С уважением, Poleosv.

Ой, спасибо, положил ссылку в закладки.
У меня начальник изредка пытается начать руководить разработкой детальной структуры БД, ему тоже естественные ключи по необъяснимый причине нравятся, вот и этот пример будет в копилке.
...
Рейтинг: 0 / 0
foreign key on update cascade
    #39600402
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Убийственные денормализация и избыточность!
...
Рейтинг: 0 / 0
foreign key on update cascade
    #39600494
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
интересный топег.
про КГ/АМ уже было?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
foreign key on update cascade
    #39600498
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий, было, но в более мягкой форме.
...
Рейтинг: 0 / 0
foreign key on update cascade
    #39600520
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийинтересный топег. про КГ/АМ уже было?Весь топик про это, после первого поста общественность другой версии не выдвигала. С небольшими лирическими отступлениями типа "начальник-тиран".
...
Рейтинг: 0 / 0
foreign key on update cascade
    #39600526
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
12.02.2018 12:26, Ivan_Pisarevsky пишет:
> Весь топик про это, после первого поста общественность другой версии не выдвигала.
> С небольшими лирическими отступлениями типа "начальник-тиран".

спасибо.
я так и думал.

зы: весь топег не Асилил, ибо в моменты алкогольного воздержания
становлюсь чрезвычайно нетолерантным.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
foreign key on update cascade
    #39601607
akrush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Polesov,
Может быть я не прав, но у вас в таблице поставщиков только 1 поле:

Код: sql
1.
2.
3.
create table SUPPLIER (
    SUPPLIER  varchar( 10 ) not null
);



судя по всему в этом и проблема.
Вы пытаетесь использовать "ИМЯ" поставщика.
Но если в эту таблицу добавить "код поставщика" (условный для вашей БД, можно даже инкремент) и при добавлении записей в другие таблицы использовать не имя, а код - то при изменении имени никто не пострадает. И целостность данных будет, и имя можно исправить.
...
Рейтинг: 0 / 0
foreign key on update cascade
    #39601608
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrush,

дык весь топик ему об этом твердят
...
Рейтинг: 0 / 0
foreign key on update cascade
    #39601617
akrush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

Извините, может не заметил, но Полесову все говорят что это проблема связей и т.п.
А вот добавить отдельное поле "код поставщика" я не увидел, поэтому и написал сообщение.
...
Рейтинг: 0 / 0
foreign key on update cascade
    #39601620
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrush,

нет, ему говорят что естественные ключи зло, и каскадные обновления то же зло. Что собственно мало отличается от того, что ты озвучил
...
Рейтинг: 0 / 0
foreign key on update cascade
    #39601657
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,
некоторым людям нравится магия каскадного обновления.
Некоторые люди полагают, что использование естественных ключей позволит "работать проще": обойтись совсем простыми SELECT (без соединений), ускорить получение данных ("джойны тормозят").
В действительности, дело прежде всего в плохом знании SQL а также особенностей используемой СУБД.
...
Рейтинг: 0 / 0
20 сообщений из 45, страница 2 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / foreign key on update cascade
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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