Возможно, вы заметили схожесть между антипаттерном Полиморфные ассоциации и антипаттерном EAV (Объект-Атрибут-Значение), описанным в предыдущей главе. В обоих антипаттернах имя объекта метаданных хранится как строковое значение. В EAV имя столбца атрибутов хранится как строковое значение в столбце attr_name. В Полиморфных ассоциациях имена родительских таблиц хранятся в столбце issue_type. Иногда это называется смешением данных с метаданными. Такая концепция описывается в несколько иной форме, т.к это уже http://all-rss.ru/cat-83-rabota-dlya-it-spetsialistov/.
Файл npHnepa:_Polymorphic/anti/select.sql
SELECT »
FROM Comments AS с
LEFT OUTER JOIN Bugs AS b
ON (b.issue_id = c.issue_id AND c.issue_type = 'Bugs')
LEFT OUTER JOIN FeatureRequests AS f
ON (f.issue_id = c.issue_id AND c.issue_type = 'FeatureRequests ' ) ;
Результат может выглядеть подобно тому, как показано ниже:
с.comment id с.issue_type c.issue_id с.comment b.issue_id f. issue id
6789 Bugs 1234 It crashes 1234 NULL
9876 Feature... 2345 Great idea! NULL 2345
Необъектноориентированный пример
В примере с Bugs и FeatureRequests подразумевается, что этими двумя родительскими таблицами моделируются связанные подтипы. Полиморфные ассоциации могут также применяться, когда родительские таблицы полностью не связаны друг с другом. Например, в базе данных электронной торговли обе таблицы, Users и Orders, могут быть связаны с Addresses.
Опубликовал vovan666
July 02 2013 19:06:38 ·
0 Комментариев ·
3899 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.