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

топ 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. плагины - требования к системе от заказчика. Послабление - используемые плагины выбираются при установке системы. Но лучше чтобы после установки и работы-хрен-знает сколько, можно было устанавливать новые плагины.

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

Архив записей в блогах:
Да огромный потенциал в использовании генетически модифицированных бактерий, таких как *E. coli* Nissle 1917 или *Clostridium novyi*, для таргетной терапии есть. Эти «умные» микроорганизмы способны распознавать биомаркеры, синтезировать лекарства и даже разрушать опухоли. Но вопрос о ...
Иван Ургант -- не просто хороший парень, но и примерный семьянин, который взял жену с ребёнком. По-моему, это здорово, когда мужчина способен на это. Девочка выросла и превратилась в девушку -- переехала учиться в Америку, где завела себе чернокожего парня. Вот они: «Бедный Ваня, ...
"Завтра я иду убивать" - эта книга от издательства ЭКСМО лежит уже около двух месяцев и ждет, когда же я ее прочитаю. Пару раз брала в руки, открыла и закрыла. Но я я ее все-таки прочитаю )) Напоминаю, " Творческий конкурс " продолжается, главным спонсором которого и является ...
За последние полвека оружейные системы развились до какого-то ранее непредставимого уровня. Спутниковая навигация, сверхпроводимые средства связи, ночные и тепловые прицелы, ...
Рос на поваленном стволе, что ли, ёлки (рядом дамская перчатка для масштаба): Т.е. этот товарищ с большое блюдце… и у него сверху (на фото немножко видно) прямо на нём растёт ещё маленький. Рядом росли ещё штуки 4 поменьше, на том же стволе. То ли какая-то вешенка, то ли ...