Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Внешние ключи, удаление дочерних записей / 18 сообщений из 18, страница 1 из 1
16.09.2013, 12:52:08
    #38397606
Harmonia
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Внешние ключи, удаление дочерних записей
Доброго времени суток!
Задача в следующем: как сделать так, чтобы при удалении родительских записей, дочерние оставались не тронутыми? Тобишь нужно вести своеобразный лог событий.
...
Рейтинг: 0 / 0
16.09.2013, 12:58:00
    #38397614
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Внешние ключи, удаление дочерних записей
Harmoniaкак сделать так, чтобы при удалении родительских записей, дочерние оставались не тронутыми?
Очень просто - НЕ делать так, чтобы удаление родительских записей вызывало каскадное удаление дочерних...
...
Рейтинг: 0 / 0
16.09.2013, 13:20:56
    #38397640
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Внешние ключи, удаление дочерних записей
Harmoniaдочерние оставались не тронутыми?Совсем нетронутыми нельзя.
См. Using FOREIGN KEY Constraints
...
Рейтинг: 0 / 0
16.09.2013, 13:34:06
    #38397654
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Внешние ключи, удаление дочерних записей
miksoftСовсем нетронутыми нельзя.Можно. DROP FK.
...
Рейтинг: 0 / 0
16.09.2013, 13:42:46
    #38397666
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Внешние ключи, удаление дочерних записей
AkinamiksoftСовсем нетронутыми нельзя.Можно. DROP FK.Ну да, гильотиной можно
...
Рейтинг: 0 / 0
16.09.2013, 14:30:23
    #38397728
Harmonia
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Внешние ключи, удаление дочерних записей
AkinaHarmoniaкак сделать так, чтобы при удалении родительских записей, дочерние оставались не тронутыми?
Очень просто - НЕ делать так, чтобы удаление родительских записей вызывало каскадное удаление дочерних...

Прошу прощения, как Вы это себе представляете? Если не указывать ограничения при удалении (on cascade, set null), то это при попытке удалить запись из родительской таблицы (со связанной дочерней) MySQL ругнется и не позволит удалить из родителя запись.
...
Рейтинг: 0 / 0
16.09.2013, 14:31:40
    #38397730
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Внешние ключи, удаление дочерних записей
HarmoniaЕсли не указывать ограничения при удалении (on cascade, set null), то это при попытке удалить запись из родительской таблицы (со связанной дочерней) MySQL ругнется и не позволит удалить из родителя запись.Так почему же "не указывать" ? Укажите set null.
...
Рейтинг: 0 / 0
16.09.2013, 14:31:44
    #38397731
Harmonia
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Внешние ключи, удаление дочерних записей
AkinamiksoftСовсем нетронутыми нельзя.Можно. DROP FK.

Спасибо, конечно, но drop-ать связь после каждой операции уж точно не вариант:))
...
Рейтинг: 0 / 0
16.09.2013, 14:34:12
    #38397735
Harmonia
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Внешние ключи, удаление дочерних записей
miksoftHarmoniaЕсли не указывать ограничения при удалении (on cascade, set null), то это при попытке удалить запись из родительской таблицы (со связанной дочерней) MySQL ругнется и не позволит удалить из родителя запись.Так почему же "не указывать" ? Укажите set null.

Насколько я понимаю тогда связанные удаленные записи в дочерней таблице просто заменятся нулями (в смысле ключевое поле)... а мне нужно хранить данные об операциях!
...
Рейтинг: 0 / 0
16.09.2013, 14:35:20
    #38397736
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Внешние ключи, удаление дочерних записей
Не "после каждой операции", а просто удалить вообще связь. Т.е. внести изменения в структуру БД. Уж коли всё равно целостность планируется развалить нахрен.
...
Рейтинг: 0 / 0
16.09.2013, 14:42:12
    #38397742
Harmonia
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Внешние ключи, удаление дочерних записей
AkinaНе "после каждой операции", а просто удалить вообще связь. Т.е. внести изменения в структуру БД. Уж коли всё равно целостность планируется развалить нахрен.

Как вариант конечно можно... Хотя не хотелось бы оставлять несвязанную таблицу...Видимо что-то я не до конца понимаю в этой "реляционности" баз данных:(( Больше путей обхода нет?
...
Рейтинг: 0 / 0
16.09.2013, 14:46:31
    #38397745
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Внешние ключи, удаление дочерних записей
Связь или есть, или её нет. В нынешней постановке задачи - её нет. Резюме - ужалить внешний ключ.
...
Рейтинг: 0 / 0
16.09.2013, 14:46:46
    #38397746
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Внешние ключи, удаление дочерних записей
* удалить
...
Рейтинг: 0 / 0
16.09.2013, 14:48:58
    #38397750
Harmonia
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Внешние ключи, удаление дочерних записей
Ясно! Всем спасибо за внимание к моей проблеме!
...
Рейтинг: 0 / 0
16.09.2013, 16:38:44
    #38397902
Arhat109
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Внешние ключи, удаление дочерних записей
HarmoniaЯсно, всем спасибо! ... и ранее: ... а мне нужно хранить данные об операциях!

Ничё не понял, в какой момент и главное, какое "прозрение" наступило...

Момент №1: Связи в БД, выражаемые констрейнами (родитель-дочка у вас), могут ИЛИ блокировать удаления ИЛИ каскадировать их изменения ИЛИ обращать в нуль. Всё. Никакой другой логики ограничения целостности они не несут. Собственно их задача и есть гарантировать сочетаемость значений в разных полях. Так, так или с нуллом. Это Вам все и написали.

Момент №2: "а мне нужно .." - и? Если Вам нужно сделать какое-то архивирование или логирование операций ... ну так и делайте! Причем тут внешние ключи и способы их работы? Например: выполняется операция удаления родительской записи. Сделайте предварительное логирование этой операции и записей и из дочерних таблиц, и удаляйте себе каскадно через ограничение целостности... кто мешает? Как лучше?

Гы... зависит от текущей архитектуры вашей БД:
1. Клиентом. Операции делаем через прокладку, которая делает логирование;
2. ХП. Операции делаем через вызов ХП, в них же и делаем логирование;
3. Триггерами. Вешаем триггер на удаление в котором и делаем лдоигрование;
... ещё как или смешанные решения;

каждый из способов имеет свои достоинства, недостатки И ограничения. Выбор - за Вами, как архитектором системы. Или за архитектором.
...
Рейтинг: 0 / 0
16.09.2013, 18:05:17
    #38397989
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Внешние ключи, удаление дочерних записей
автормогут ИЛИ блокировать удаления ИЛИ каскадировать их изменения ИЛИ обращать в нуль. Всё.

автор[ON DELETE reference_option]

reference_option:
RESTRICT | CASCADE | SET NULL | NO ACTION

чукча нечетатель?
...
Рейтинг: 0 / 0
16.09.2013, 18:30:02
    #38398012
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Внешние ключи, удаление дочерних записей
ScareCrowавтормогут ИЛИ блокировать удаления ИЛИ каскадировать их изменения ИЛИ обращать в нуль. Всё.

автор[ON DELETE reference_option]

reference_option:
RESTRICT | CASCADE | SET NULL | NO ACTION

чукча нечетатель?о национальном вопросе: http://dev.mysql.com/doc/refman/5.5/en/create-table-foreign-keys.html NO ACTION: A keyword from standard SQL. In MySQL, equivalent to RESTRICT.
...
Рейтинг: 0 / 0
16.09.2013, 19:31:13
    #38398074
Arhat109
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Внешние ключи, удаление дочерних записей
miksoft,

:)
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Внешние ключи, удаление дочерних записей / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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