powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Двухсторонний Cascade Delete в One-To-One
10 сообщений из 10, страница 1 из 1
Двухсторонний Cascade Delete в One-To-One
    #38651308
Xcopy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ребят, всем привет!

Попробую перейти сразу к делу:
Есть 2 таблицы:

Messageidtextphoto_id

Photoidfile_name

От Message к Photo (через photo_id) идет связь один к одному. На эту связь я сделал каскадное удаление.
Теперь, при удалении записи в Photo удалется соответствующая запись в Message.

А как сделать без триггеров так, чтобы какскадное удаление работало в обе стороны? Например, чтобы я удалял запись в таблице Message и соответствующая ей фотография в Photo удалялась тоже.

Заранее спасибо!!!
...
Рейтинг: 0 / 0
Двухсторонний Cascade Delete в One-To-One
    #38651310
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XcopyОт Message к Photo (через photo_id) идет связь один к одному. На эту связь я сделал каскадное удаление.
Теперь, при удалении записи в Photo удалется соответствующая запись в Message.Это связь много-к-одному. Разверните ее направление и получите "чтобы я удалял запись в таблице Message и соответствующая ей фотография в Photo удалялась тоже."
...
Рейтинг: 0 / 0
Двухсторонний Cascade Delete в One-To-One
    #38651316
Xcopy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft, большое спасибо за ответ!

Я бы так и сделал, но:
дело в том, что в таблице Photo хранятся не только фотографии для Message'в, но и для таблицы Users (аватарки) которую я сюда не привел...

Каждая фотография может соответствовать только одному Message или User, и к Message может быть прикреплена только 1 фотография т.к. (проект такой :) )

Можно применить ваш вариант, но тогда придется создать 2 таблицы:
Photo - для Message и Avatar для User.
...
Рейтинг: 0 / 0
Двухсторонний Cascade Delete в One-To-One
    #38651351
Xcopy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прикрепил визуализацию модели:

:)
...
Рейтинг: 0 / 0
Двухсторонний Cascade Delete в One-To-One
    #38651357
Xcopy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно сделать вот-так, но это выглядит как-то кривовато...
...
Рейтинг: 0 / 0
Двухсторонний Cascade Delete в One-To-One
    #38651540
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XcopyМожно применить ваш вариант, но тогда придется создать 2 таблицы:
Photo - для Message и Avatar для User.я бы так и сделал.

Либо, хотя это будет костылем, можете оставить изначальную связь, но удаление производите через удаление записи в таблице Photo.
...
Рейтинг: 0 / 0
Двухсторонний Cascade Delete в One-To-One
    #38651555
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Xcopyкак сделать без триггеров так, чтобы какскадное удаление работало в обе стороны? Например, чтобы я удалял запись в таблице Message и соответствующая ей фотография в Photo удалялась тоже.Не понимаю смысл двустороннего каскадного удаления.

Смысл каскада (как я его понимаю) в том, что есть главная таблица, и есть подчиненные. И при удалении записи из главной таблицы каскадно удаляются записи во всех подчиненных таблицах.

Попытка назначить одной сущности более одной главной таблицы... Не понимаю смысла этого действа, кроме как запутать себя, сервер, и всех тех кто будет потом пытаться разобраться в коде.
...
Рейтинг: 0 / 0
Двухсторонний Cascade Delete в One-To-One
    #38651813
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cygapb-007Xcopyкак сделать без триггеров так, чтобы какскадное удаление работало в обе стороны? Например, чтобы я удалял запись в таблице Message и соответствующая ей фотография в Photo удалялась тоже.Не понимаю смысл двустороннего каскадного удаления.

Смысл каскада (как я его понимаю) в том, что есть главная таблица, и есть подчиненные. И при удалении записи из главной таблицы каскадно удаляются записи во всех подчиненных таблицах.

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

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

я не уверен за все версии мускла, но
у меня каскад на полную используеться

1)таблиа с сылкой на себя - дерево. главнаые узлы(корни) дерева, ссылаються на самих себя(айди записи = внешнему ключу)
при удалении узла, вся ветка каскадно удаляеться, при удалении корня, тоже всё нормально

2)таблица юзеры, с сылкой на корень из предыдущей таблицы, а в предыдущей ссылка на юзера(чтобы для любого элемента не надо было прослеживать цепочку до корня, чтоб определить этого юзера элемент или нет)

так вот, сдесь каскадные действия не работают в обе стороны.
тоесть мускл сдесь цикл не обнаруживает
удаляет юзера(ставит лок на строку) смотрит что надо бы и корень удалить, удаляет корень(ставит лок на строку), и тут оказываеться надо юзера удалить - пытаеться и видит что лок стоит, что нельзя. и выдаёт ошибку.

А логики вообще в подобных действительно нету. ибо по логике каскадное действие это не упростить работу, для этого есть хранимки тригеры
каскадное действие для поддержки целосности базы, чтобы гарантировать что одного без другого быть не может, поэтому при удалении другого, одно надо тутже удалять - и это всё одним заходом.

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

ЗЫ
а тригера бояться не надо. у меня на дерево, юзеров и ещо одну подчинёную таблицу навешано по три тригера на каждую(на одну четыре), плюс две промеждуточные таблицы, одна с тригером, плюс три ивента с периодичностью старта 5сек.
и это всё для обеспечения нужной мне логики.
...
Рейтинг: 0 / 0
Двухсторонний Cascade Delete в One-To-One
    #38652060
Xcopy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ребят, всем большое спасибо за отзывы!!!

Я немного пораскинул головой и решил просто убрать Photo и воткнуть поля avatar в User и photo в Message т.к. все равно к каждому сообщению может быть прикреплена только 1 фотография, с аватаркой то же самое.

Вроде и без костылей, и работает...

Так что получилось, что-то вроде:
...
Рейтинг: 0 / 0
Двухсторонний Cascade Delete в One-To-One
    #38652067
Xcopy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хотя, модель, конечно получилась плохо маштабируемой...
такое ощущение)
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Двухсторонний Cascade Delete в One-To-One
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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