Полиморфная связь в СУБД. Что это? В каких случаях использовать?
Primary tabs
Forums:
Полиморфные связи используются в СУБД, когда требуется установить связь между основной таблицей, и ... некой второй таблицей (а какой, - будет известно только после запуска скрипта:))
Другими словами, это классический пример связи Один-к-одному по внешнему ключу, в котором одна из таблиц определяется динамически. Вот этот пример:
Обычная связь
Есть менеджер, который может оформить возврат товара.
+--------------+ | rejection | | manager | +--------------+
rejection:
+------+------------+------------+ | id | date | manager_id | +------+------------+------------+ | 1 | 2018-08-28 | 1 | | 2 | 2018-08-28 | 1 | +------+------------+------------+
manager:
+----+--------+ | id | name | +----+--------+ | 1 | Вася | +----+--------+
НО! Ещё одна личность, которая имеет право осуществить возврат - кассир!
Так вот. Теперь внешний ключ использовать не удастся, т.к. у нас 2 таблицы, с которыми может быть установлена связь.
Конечно, можно добавить в таблицу rejection поле cashier_id. Но тут у нас появится director, который захочет авторитарным произволом всегда иметь возможность сделать возврат, directorWife (без комментариев), guard на случай, если срочно надо, cleaningWoman потому что без неё ничего не обходится, и т.д. И для них всех придётся создавать поля и внешние ключи.
Итак, чтобы избежать лишнего размножения полей с внешними id, и придумана полиморфная связь.
Полиморфная связь
Добавляем к таблице rejection поле entity_type. Вуаля, теперь id всех таблиц можно хранить в одном поле, а на таблицу, где искать укажет поле "тип сущности":
rejection:
+------+------------+--------------+----------------+ | id | date | operator_id | operator_type | +------+------------+--------------+----------------+ | 1 | 2018-08-28 | 1 | manager | | 2 | 2018-08-28 | 1 | cashier | +------+------------+--------------+----------------+
Источник
- Log in to post comments
- 7241 reads
vedro-compota
Tue, 08/28/2018 - 16:35
Permalink
да, это слабо ложится на
да, это слабо ложится на концепцию реляционных баз именно из-за отсутствия возможности использовать внешний ключ
_____________
матфак вгу и остальная классика =)