|
|
|
Внешние ключи, удаление дочерних записей
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток! Задача в следующем: как сделать так, чтобы при удалении родительских записей, дочерние оставались не тронутыми? Тобишь нужно вести своеобразный лог событий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2013, 12:52:08 |
|
||
|
Внешние ключи, удаление дочерних записей
|
|||
|---|---|---|---|
|
#18+
Harmoniaкак сделать так, чтобы при удалении родительских записей, дочерние оставались не тронутыми? Очень просто - НЕ делать так, чтобы удаление родительских записей вызывало каскадное удаление дочерних... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2013, 12:58:00 |
|
||
|
Внешние ключи, удаление дочерних записей
|
|||
|---|---|---|---|
|
#18+
Harmoniaдочерние оставались не тронутыми?Совсем нетронутыми нельзя. См. Using FOREIGN KEY Constraints ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2013, 13:20:56 |
|
||
|
Внешние ключи, удаление дочерних записей
|
|||
|---|---|---|---|
|
#18+
miksoftСовсем нетронутыми нельзя.Можно. DROP FK. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2013, 13:34:06 |
|
||
|
Внешние ключи, удаление дочерних записей
|
|||
|---|---|---|---|
|
#18+
AkinamiksoftСовсем нетронутыми нельзя.Можно. DROP FK.Ну да, гильотиной можно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2013, 13:42:46 |
|
||
|
Внешние ключи, удаление дочерних записей
|
|||
|---|---|---|---|
|
#18+
AkinaHarmoniaкак сделать так, чтобы при удалении родительских записей, дочерние оставались не тронутыми? Очень просто - НЕ делать так, чтобы удаление родительских записей вызывало каскадное удаление дочерних... Прошу прощения, как Вы это себе представляете? Если не указывать ограничения при удалении (on cascade, set null), то это при попытке удалить запись из родительской таблицы (со связанной дочерней) MySQL ругнется и не позволит удалить из родителя запись. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2013, 14:30:23 |
|
||
|
Внешние ключи, удаление дочерних записей
|
|||
|---|---|---|---|
|
#18+
HarmoniaЕсли не указывать ограничения при удалении (on cascade, set null), то это при попытке удалить запись из родительской таблицы (со связанной дочерней) MySQL ругнется и не позволит удалить из родителя запись.Так почему же "не указывать" ? Укажите set null. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2013, 14:31:40 |
|
||
|
Внешние ключи, удаление дочерних записей
|
|||
|---|---|---|---|
|
#18+
AkinamiksoftСовсем нетронутыми нельзя.Можно. DROP FK. Спасибо, конечно, но drop-ать связь после каждой операции уж точно не вариант:)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2013, 14:31:44 |
|
||
|
Внешние ключи, удаление дочерних записей
|
|||
|---|---|---|---|
|
#18+
miksoftHarmoniaЕсли не указывать ограничения при удалении (on cascade, set null), то это при попытке удалить запись из родительской таблицы (со связанной дочерней) MySQL ругнется и не позволит удалить из родителя запись.Так почему же "не указывать" ? Укажите set null. Насколько я понимаю тогда связанные удаленные записи в дочерней таблице просто заменятся нулями (в смысле ключевое поле)... а мне нужно хранить данные об операциях! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2013, 14:34:12 |
|
||
|
Внешние ключи, удаление дочерних записей
|
|||
|---|---|---|---|
|
#18+
Не "после каждой операции", а просто удалить вообще связь. Т.е. внести изменения в структуру БД. Уж коли всё равно целостность планируется развалить нахрен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2013, 14:35:20 |
|
||
|
Внешние ключи, удаление дочерних записей
|
|||
|---|---|---|---|
|
#18+
AkinaНе "после каждой операции", а просто удалить вообще связь. Т.е. внести изменения в структуру БД. Уж коли всё равно целостность планируется развалить нахрен. Как вариант конечно можно... Хотя не хотелось бы оставлять несвязанную таблицу...Видимо что-то я не до конца понимаю в этой "реляционности" баз данных:(( Больше путей обхода нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2013, 14:42:12 |
|
||
|
Внешние ключи, удаление дочерних записей
|
|||
|---|---|---|---|
|
#18+
Связь или есть, или её нет. В нынешней постановке задачи - её нет. Резюме - ужалить внешний ключ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2013, 14:46:31 |
|
||
|
Внешние ключи, удаление дочерних записей
|
|||
|---|---|---|---|
|
#18+
* удалить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2013, 14:46:46 |
|
||
|
Внешние ключи, удаление дочерних записей
|
|||
|---|---|---|---|
|
#18+
Ясно! Всем спасибо за внимание к моей проблеме! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2013, 14:48:58 |
|
||
|
Внешние ключи, удаление дочерних записей
|
|||
|---|---|---|---|
|
#18+
HarmoniaЯсно, всем спасибо! ... и ранее: ... а мне нужно хранить данные об операциях! Ничё не понял, в какой момент и главное, какое "прозрение" наступило... Момент №1: Связи в БД, выражаемые констрейнами (родитель-дочка у вас), могут ИЛИ блокировать удаления ИЛИ каскадировать их изменения ИЛИ обращать в нуль. Всё. Никакой другой логики ограничения целостности они не несут. Собственно их задача и есть гарантировать сочетаемость значений в разных полях. Так, так или с нуллом. Это Вам все и написали. Момент №2: "а мне нужно .." - и? Если Вам нужно сделать какое-то архивирование или логирование операций ... ну так и делайте! Причем тут внешние ключи и способы их работы? Например: выполняется операция удаления родительской записи. Сделайте предварительное логирование этой операции и записей и из дочерних таблиц, и удаляйте себе каскадно через ограничение целостности... кто мешает? Как лучше? Гы... зависит от текущей архитектуры вашей БД: 1. Клиентом. Операции делаем через прокладку, которая делает логирование; 2. ХП. Операции делаем через вызов ХП, в них же и делаем логирование; 3. Триггерами. Вешаем триггер на удаление в котором и делаем лдоигрование; ... ещё как или смешанные решения; каждый из способов имеет свои достоинства, недостатки И ограничения. Выбор - за Вами, как архитектором системы. Или за архитектором. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2013, 16:38:44 |
|
||
|
Внешние ключи, удаление дочерних записей
|
|||
|---|---|---|---|
|
#18+
автормогут ИЛИ блокировать удаления ИЛИ каскадировать их изменения ИЛИ обращать в нуль. Всё. автор[ON DELETE reference_option] reference_option: RESTRICT | CASCADE | SET NULL | NO ACTION чукча нечетатель? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2013, 18:05:17 |
|
||
|
Внешние ключи, удаление дочерних записей
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2013, 18:30:02 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38397640&tid=1836042]: |
0ms |
get settings: |
7ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
42ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
33ms |
get tp. blocked users: |
1ms |
| others: | 209ms |
| total: | 314ms |

| 0 / 0 |
