У меня есть две таблицы: foos
и bars
, и между ними существует отношение многие-к-одному: каждая foo
может иметь много bars
. У меня также есть представление foobars
, которое объединяет эти две таблицы (его запрос похож на select foo.*, bar.id from foos, bars where bar.foo_id=foo.id
).
РЕДАКТИРОВАТЬ: Вы бы не ошиблись, если бы сказали, что есть отношения многие ко многим между foo
с и bar
с. A bar
, однако, является просто тегом (фактически, это размер) и состоит только из его имени. Таблица bars
играет ту же роль, что и таблица ссылок.
У меня есть правило вставки в foobars
, когда часть «foo» вставляется в foos
как новая строка, а часть «bar», которая состоит из пары идентификаторов бара, разделенных запятыми, split, и для каждой такой части создается связь между ней и соответствующим foo
(для этого я использую процедуру).
Это прекрасно работает для вставок. У меня проблема, однако, когда дело доходит до обновления всего этого. foo
часть правила проста. Тем не менее, я не знаю, как справиться с множественной bar
частью. Когда я пытаюсь сделать что-то вроде DELETE FROM bars WHERE foo_id=new.foo_id
в правиле, я заканчиваю удаление всего из таблицы bars
.
Что я делаю не так? Есть ли способ достичь того, что мне нужно? Наконец, мой подход ко всему разумному?
(Я делаю это слишком сложно с представлением, потому что данные, которые я получаю, имеют форму «foo
и все их bar
s», но пользователь должен видеть только foobars
.)