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

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

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

Архив записей в блогах:
Компания «STEELREX» приглашает к сотрудничеству строительные магазины, оптовые базы, а также гипермаркеты стройматериалов Москвы, Московской области и других городов России. Мы предлагаем большой выбор недорогих крепежных изделий с выгодными условиями доставки и расчетов. Наш асс ...
Спикер Рады поддержал введение визового режима с Россией Спикер Верховной рады Украины Андрей Парубий высказался в поддержку введения визового режима с Россией, передает  ТСН . «Находясь на должности секретаря СНБО, я выступал с инициативой введения визового режима с Российск ...
На самом деле разговор об «итогах десятилетия» не закончен – просто, в связи с наступающей датой, хочется подвести и итоги прошедшего года. Правда, если честно, особых изменений за указанный период в мире не произошло – но это и к лучшему. (Поскольку в текущем состоянии единственно ...
Вчера такое было странное ощущение/настроение: вот вроде бы и доканала меня эта жара, а все равно как-то прочувствовала, что это последние такие жаркие денечки в сезоне лето/осень-23. Даже слегка жаль, что очередное лето, пусть и со сраной жарой, заканчивается и впереди снова почти девять ...
Сегодня много шкребла, чистила, мыла, стирала, гладила, вешала. Мыла окна и все, что ...