[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Связи и тригеры
hurt3
всем привет.
Есть две таблицы
первая книги

book

id | book_name


и таблица связи книги и стола

link_book_tools

book_id | table_id

таблица бук содержит записи о книгах, книги раскиданы по "инструментам" многие ко многим.
И вот в чем суть как реализовать на уровне mysql грамотную очистку. Т.е. когда мы удаляем все записи из таблицы "связей" (link_book_tools) т.е. удаляем все связи определенной книги и инструментов, нужно что бы строка с id книги удалялась и из таблицы book

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

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

T1grOK
Цитата (hurt3 @ 3.04.2016 - 17:09)
на уровне связи mysql это сделать не получилось, т.к.нет условия учитывающего полное удаление конкретного айдишника из таблицы link_book_tools

What? Это как? При удалении, есть опция CASCADE, которая сама подчистит все связи с записью. Все замечательно работает.

_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
hurt3
T1grOK

смотрите она хороша в том случае если нужно, удалить последовательность книга -> все линки(конкретной книги) с инструментами
но если мы удаляем все линки(конкретной книги) , мы должны удалить книгу - это не сделать с помошью связей mysql. т.к. при удалении 1 линка удаляется и очищается и таблица книг, а затем ощищаються все связанные с ней линки
T1grOK
Цитата (hurt3 @ 3.04.2016 - 17:50)
т.к. при удалении 1 линка удаляется и очищается и таблица книг, а затем ощищаються все связанные с ней линки

Ничего подобного. Т-к основная сущность находится в другой таблице.
Цитата (hurt3 @ 3.04.2016 - 17:50)
но если мы удаляем все линки(конкретной книги) , мы должны удалить книгу

Тогда триггером(BEFORE DELETE) или на стороне своего приложения.


_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
hurt3
user posted image

вот картинка отражает структуру, когда мы удлаяем все красные блоки из второй таблицы, родительский красный блок должен удалится и из первой, но лишь когда все дочерние удалены из второй!
T1grOK
Цитата (T1grOK @ 3.04.2016 - 18:04)
Тогда триггером(BEFORE DELETE) или на стороне своего приложения.



_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
hurt3
T1grOK

не получается его написать в phpmyadmin)))), можете ссылку на мануал нормальный скинуть, не понимаю как указывать переменную id которая отправляется приложением к бд
и phpmyadmin ругается на if end и т.п.
T1grOK
Хм..сразу первая ссылка в поисковой выдаче
http://www.techonthenet.com/mysql/triggers/before_delete.php
OLD содержит данные удаляемой строки.
Проверяем доп запросом количество строк удовлетворяющее условию и принимаем решение.

_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
hurt3
а можно как то получить данные которые идут в запросе, после чего срабатывает тригер?

и еще вопрос допустим система будет постоянно добавлять и удалять линки не слишком большая нагрузка ляжет на систему с постоянной проверкой по триггеру?
T1grOK
Цитата (hurt3 @ 3.04.2016 - 18:17)
а можно как то получить данные которые идут в запросе, после чего срабатывает тригер?

Все действия выполняются в тригере, на то он и триггер чтобы срабатывать по основным операциям CRUD.

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

_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
hurt3
T1grOK
понял спасибо большое
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.