Как в MySQL организовать самопополняющуюся таблицу-справочник?
Есть основная таблица, а в ней есть поле address. Адреса часто повторяются. Можно создать родительскую таблицу-справочник Address, а в основной таблице – внешний ключ address_id, ссылающийся на поле id в таблице Address. Всё было бы хорошо, но только адреса время от времени могут добавляться новые. Для этого придется вручную добавить новый адрес в таблицу Address, после чего добавление записи в основную таблицу станет возможным. Это гемор, если честно.
Можно ли средствами MySQL 5.7 организовать автопополнение таблицы-справочника?
Если такую возможность представляет сама СУБД, то я лучше буду пользоваться ей, чем кодом. Во-первых, скорей всего это будет производительнее. А во-вторых, это снижает степень зависимости БД от приложения.
Иван Мельников, просто прямо сейчас проект в котором кто-то очень любил пользоваться возможностями субд.
Но не любил документацию и логику.
Так что в базе 300 таблиц, 30 вьюх, и пара сотен функций/триггеров.
В итоге половина логики находится в базе, а по коду нихрена не понятно что происходит.
При том что в коде тоже используются всевозможные триггеры и обсерверы событий, почему что-то вынесено в базу никто не знает. На выходе только гемор при поиске как работает та или иная функция.
Триггеры, при вставку в таблицу где есть много адресов пилим триггер, который пытается вставить адрес в таблицу справочник, но там поле адрес должно быть уникальным, вот и все, даже если адрес будет повторятся он не вставится как новая запись
Спасибо за решение.
Но, как я понимаю, каждый раз пытаться делать INSERT в таблицу Address – это лишние затраты времени. Можно ли организовать по такой логике: если при попытке сделать запись в основную таблицу возникает ошибка "невозможное значение внешнего ключа", делается запись в таблицу-справочник, а затем уже делается запись в основную таблицу?
тогда надо сразу искать в справочнике, находить id если есть, если нет вставлять адрес и получать id, а далее уже делать вставку в основную с привязкой к справочнику, но тут кодом,