|
|
|
Двухсторонний Cascade Delete в One-To-One
|
|||
|---|---|---|---|
|
#18+
Ребят, всем привет! Попробую перейти сразу к делу: Есть 2 таблицы: Messageidtextphoto_id Photoidfile_name От Message к Photo (через photo_id) идет связь один к одному. На эту связь я сделал каскадное удаление. Теперь, при удалении записи в Photo удалется соответствующая запись в Message. А как сделать без триггеров так, чтобы какскадное удаление работало в обе стороны? Например, чтобы я удалял запись в таблице Message и соответствующая ей фотография в Photo удалялась тоже. Заранее спасибо!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2014, 12:37:48 |
|
||
|
Двухсторонний Cascade Delete в One-To-One
|
|||
|---|---|---|---|
|
#18+
XcopyОт Message к Photo (через photo_id) идет связь один к одному. На эту связь я сделал каскадное удаление. Теперь, при удалении записи в Photo удалется соответствующая запись в Message.Это связь много-к-одному. Разверните ее направление и получите "чтобы я удалял запись в таблице Message и соответствующая ей фотография в Photo удалялась тоже." ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2014, 12:53:31 |
|
||
|
Двухсторонний Cascade Delete в One-To-One
|
|||
|---|---|---|---|
|
#18+
miksoft, большое спасибо за ответ! Я бы так и сделал, но: дело в том, что в таблице Photo хранятся не только фотографии для Message'в, но и для таблицы Users (аватарки) которую я сюда не привел... Каждая фотография может соответствовать только одному Message или User, и к Message может быть прикреплена только 1 фотография т.к. (проект такой :) ) Можно применить ваш вариант, но тогда придется создать 2 таблицы: Photo - для Message и Avatar для User. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2014, 13:18:14 |
|
||
|
Двухсторонний Cascade Delete в One-To-One
|
|||
|---|---|---|---|
|
#18+
Прикрепил визуализацию модели: :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2014, 14:57:01 |
|
||
|
Двухсторонний Cascade Delete в One-To-One
|
|||
|---|---|---|---|
|
#18+
Можно сделать вот-так, но это выглядит как-то кривовато... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2014, 15:13:03 |
|
||
|
Двухсторонний Cascade Delete в One-To-One
|
|||
|---|---|---|---|
|
#18+
XcopyМожно применить ваш вариант, но тогда придется создать 2 таблицы: Photo - для Message и Avatar для User.я бы так и сделал. Либо, хотя это будет костылем, можете оставить изначальную связь, но удаление производите через удаление записи в таблице Photo. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2014, 22:55:03 |
|
||
|
Двухсторонний Cascade Delete в One-To-One
|
|||
|---|---|---|---|
|
#18+
Xcopyкак сделать без триггеров так, чтобы какскадное удаление работало в обе стороны? Например, чтобы я удалял запись в таблице Message и соответствующая ей фотография в Photo удалялась тоже.Не понимаю смысл двустороннего каскадного удаления. Смысл каскада (как я его понимаю) в том, что есть главная таблица, и есть подчиненные. И при удалении записи из главной таблицы каскадно удаляются записи во всех подчиненных таблицах. Попытка назначить одной сущности более одной главной таблицы... Не понимаю смысла этого действа, кроме как запутать себя, сервер, и всех тех кто будет потом пытаться разобраться в коде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2014, 23:24:45 |
|
||
|
Двухсторонний Cascade Delete в One-To-One
|
|||
|---|---|---|---|
|
#18+
Cygapb-007Xcopyкак сделать без триггеров так, чтобы какскадное удаление работало в обе стороны? Например, чтобы я удалял запись в таблице Message и соответствующая ей фотография в Photo удалялась тоже.Не понимаю смысл двустороннего каскадного удаления. Смысл каскада (как я его понимаю) в том, что есть главная таблица, и есть подчиненные. И при удалении записи из главной таблицы каскадно удаляются записи во всех подчиненных таблицах. Попытка назначить одной сущности более одной главной таблицы... Не понимаю смысла этого действа, кроме как запутать себя, сервер, и всех тех кто будет потом пытаться разобраться в коде. я больше скажу. каскадные действия применимы к ограничениям накладываемые логикой базы. я не уверен за все версии мускла, но у меня каскад на полную используеться 1)таблиа с сылкой на себя - дерево. главнаые узлы(корни) дерева, ссылаються на самих себя(айди записи = внешнему ключу) при удалении узла, вся ветка каскадно удаляеться, при удалении корня, тоже всё нормально 2)таблица юзеры, с сылкой на корень из предыдущей таблицы, а в предыдущей ссылка на юзера(чтобы для любого элемента не надо было прослеживать цепочку до корня, чтоб определить этого юзера элемент или нет) так вот, сдесь каскадные действия не работают в обе стороны. тоесть мускл сдесь цикл не обнаруживает удаляет юзера(ставит лок на строку) смотрит что надо бы и корень удалить, удаляет корень(ставит лок на строку), и тут оказываеться надо юзера удалить - пытаеться и видит что лок стоит, что нельзя. и выдаёт ошибку. А логики вообще в подобных действительно нету. ибо по логике каскадное действие это не упростить работу, для этого есть хранимки тригеры каскадное действие для поддержки целосности базы, чтобы гарантировать что одного без другого быть не может, поэтому при удалении другого, одно надо тутже удалять - и это всё одним заходом. соответсвенно вопрос, если бы каскадно удаляли в обе стороны, как создать пару в базе? ведь одновременно нельзя создать две записи, за одну транкзанкцию можно, но чтобы ни для одной трочки кода небыло ситуации когда существует одно и не существует другого, мы не получаем - ибо между вставками, если завтра туда впишет ктото свой код, для негу будет существовать одно, а другого нет. ЗЫ а тригера бояться не надо. у меня на дерево, юзеров и ещо одну подчинёную таблицу навешано по три тригера на каждую(на одну четыре), плюс две промеждуточные таблицы, одна с тригером, плюс три ивента с периодичностью старта 5сек. и это всё для обеспечения нужной мне логики. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2014, 11:39:01 |
|
||
|
Двухсторонний Cascade Delete в One-To-One
|
|||
|---|---|---|---|
|
#18+
Ребят, всем большое спасибо за отзывы!!! Я немного пораскинул головой и решил просто убрать Photo и воткнуть поля avatar в User и photo в Message т.к. все равно к каждому сообщению может быть прикреплена только 1 фотография, с аватаркой то же самое. Вроде и без костылей, и работает... Так что получилось, что-то вроде: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2014, 14:06:50 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38651316&tid=1834760]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
54ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
66ms |
get tp. blocked users: |
2ms |
| others: | 205ms |
| total: | 366ms |

| 0 / 0 |
