Разработка, Разработка модели модуля с учетом архитектурных решений, Полиморфные связи - Разработка модуля для хранения и управления документами в электронном виде

Разработка модели модуля с учетом архитектурных решений
Полиморфные связи

Документ может относиться к объектам различного типа, поэтому разумно реализовать возможность его привязки к любым типам (в т. ч. другому документу).

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

Но такая схема не является приемлемой, если необходимо обеспечить возможность отношения таблицы к любой другой произвольной таблице. Если запись таблицы хранит внешний идентификатор, то таблица, запись которой он идентифицирует, должна быть однозначно определена. Для решения этой задачи фреймворк Ruby on Rails поддерживает механизм полиморфных связей.

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

Как видно из диаграммы, для идентификации записи в произвольной таблице сущности documents достаточно иметь внешний ключ (documentable_id) и имя этой таблицы (documentable_type).

В разрабатываемом приложении полиморфная связь использована для реализации моделей документа (document) и вложения (attachment).

Похожие статьи




Разработка, Разработка модели модуля с учетом архитектурных решений, Полиморфные связи - Разработка модуля для хранения и управления документами в электронном виде

Предыдущая | Следующая