Плагины в оперденях.

топ 100 блогов zabivator11.02.2010 Есть одна проблема, хочу попросить ваших мнений и помощи в решении.

Есть некоторая опердень. В ней есть:
* сущности "объекты"
* объекты группируются в группы
* объекты имеют связи с другой частью систеым, допустим, номером заказа
* объекты разнотипные, это означает, что помимо общей информации о объекте (ID, связь с группой, номер заказа), есть зависимые от атрибута типы
* добавление новых типых объектов должно быть оформлено в виде плагинов
* у каждого типа объекта есть так называемый "главный отображемый атрибут". Когда пользователь просматривает список всех объектов, он видит общие атрибуты, тип объекта, и этот самый главный отображаемый атрибут. Данный атрибут является как бы "ключом" объектов этого типа данных с точки зрения пользователя. Например, госномер автомобиля, или номер контейнера.

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

Все решения имеют общую часть:
* Сделать таблицу со всеми основными атрибутами объектов
* Построить связи с таблицами:
1) "группы" (многие-к-одной)
2) "заказы" (один-к-одному).

Дальше начинаются вопросы "как представлять тип объекта" и "как связывать общие атрибуты и дополнительные атрибуты, зависимые от типа".

Окей, думаю, сделаем ObjectType = ENUM( car, container ) и колонку этого типа данных, положим её в таблицу "объекты", а также ID таблицы car или container в зависимости от колоник типа ObjectType.

В чём проблемы?
1) Получение списка всех объектов с колонкой "главный отображаемый атрибут" (пусть он строка, либо кастуется в строку). Получается мне нужно делать столько джойнов, сколько у меня типов. Т.е. что-то типа
select group,orderNumber from object inner join (select main from car) where car.id = object.externalId
union all
select group,orderNumber from object inner join (select main from car) where car.id = object.externalId
Ну или
select group,orderNumber from object inner join ((select id,main,CAR as objectType from car) union all (select id,main,CONTAINER from container)) as all
where all.id = object.externalId and all.objectType = object.objectType;
Хреново как-то.
2) Расширяемость. Добавляю я новый плагин - придётся модифицировать этот тип enum.
По-моему, такая операция потребует перестроить таблицу (если postgres такое вообще позволяет делать).
И как при подключении нового типа объектов изменить запрос из пункта (1)? Дописывать query?
Не, ну можно попарно группировать ((object и car) и container), где каждую пару представлять отдельной view... Но это же маразм.

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

P.S. плагины - требования к системе от заказчика. Послабление - используемые плагины выбираются при установке системы. Но лучше чтобы после установки и работы-хрен-знает сколько, можно было устанавливать новые плагины.

Оставить комментарий

Архив записей в блогах:
Скучно в воскресенье на работе. Журналист: - Ротация состава у «Челси» возможна? Жирков: - Наверное, что-то будет. Но мне действительно вновь хочется сыграть против «Спартака». Надо бы еще разок ему забить (улыбается). http://www.bobsoccer.ru/user/11/blog/?item=6985 ...
До 11 декабря (23:59 МСК)испытайте Ansel в War Thunder и выиграйте мощную видеокарту GeForce GTX 1050 Ti,Золотые Орлы и премиумную технику! Друзья, мы ввели поддержку технологии NVIDIA Ansel! Теперь вы можете снимать самые невероятные и впечатляющие игровые скриншоты прямо из ...
Любопытная беседа тут произошла с очередным украинствующим поборником святых США. Она лишний раз подтвердила, что что-то пытаться до них донести- это пустая потеря времени. На самом деле я прекрасно понимаю украинцев. Во-первых, они невероятно ненавидят Россию. Во-вторых, страны Запада ...
Наставник воспитывает в своих подопечных вполне определённые черты мышления, это камни фундамента будущего мыслителя, которым буддист должен стать. Когда в итоге эти фундаменты будут построены, то сторонний наблюдатель, сравнивая их мышления, удивлён будет их схожести и вместе с тем ин ...
В детстве на прогулках мама подробно мне не рассказывала о ночлежках Хитровки, подробности я читала в книгах гораздо позже,но дом-утюг ещё тогда показался мне интересным,не могла точно понять в каком стиле он построен Начиная с XVII и до середины XVIII века владение принадлежало ...