Soft References for Entities

0
No votes yet
Github
Координаты компонента:
Последняя версия:
0.4.0
Автор: 
Категория: 
Обновлено: 
Ср, 10/31/2018 - 15:34
Поддерживаемые версии: 
6.8
6.9
6.10
Лицензия: 
Ресурсы: 

Описание

Компонент предназначен для для создания ссылок или связи сущностей без использования внешнего ключа в базе данных

Что такое soft reference?

Soft reference – это ссылка в модели данных, которая не создает внешний ключ в базе данных, а также не обеспечивает целостность ссылочных данных для него. Вместо этого создается «мягкая» (soft) или «слабая» (weak) ссылка на другую сущность.

Пример: Покупатель - Заказ

Возьмем пример Покупатель <>--> Заказ. У одного покупателя может быть несколько заказов. В терминологии CUBA такая связь называется композицией. Это означает, что в таблице «Заказы» будет колонка "customer_id", которая содержит первичный ключ клиента. Для каждого заказа есть клиент, с которым он ассоциируется.

В случае «мягкой» ссылки все устроено по-другому. Колонка "customer_id" существует наряду с таблицей «Заказы». Но вместо внешнего ключа к базе данных будет следующая строка в колонке soft reference: example$Customer-2fdc4906-fa89-11e7-8c3f-9a214cf093ae.

Внешние ключи важны, почему кто-то может не захотеть их использовать?

Все верно. В большинстве случаев нет необходимости использовать soft-ссылки. Раз они не обладают полезными свойствами целостности ссылочных данных, у них есть много недостатков. Почему же они нам все равно нужны? Вот пример:

Пример: Покупатель - Заказ - Комментарий

Предположим, нам нужна колонка «Комментарий». Комментарии могут быть созданы для множества различных сущностей. Могут быть комментарии для покупателей, так же, как и для заказов, продуктов и т.д. Обычно для решения этой задачи на языке программирования вроде Java вы бы создали интерфейс под названием «Commentable». Этот интерфейс отмечает все классы, которые вы хотите сделать комментируемыми. Тогда класс Комментарий будет иметь ссылку на комментируемый объект. В этом суть полиморфизма.

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

Для межсекторной функциональности решением могут быть soft-ссылки.

Вам есть что добавить?

Bugtracker

Открыть

Обсуждения

Просмотреть