Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите с запросом / 10 сообщений из 10, страница 1 из 1
07.12.2006, 14:02
    #34183274
autocommit
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом
есть таблички:
type:
id
name

obj:
id
idtype
name

parname:
id
idtype
name

parval:
idparname
idobj
val

у объекта определенного типа могут быть параметры. Параметры могут иметь два значения по-умолчанию и рабочее. При создании нового параметра автоматически создается значение по-умолчанию. Задача выбрать значения всех параметров для всех объектов, при условии что если отсутствует рабочее значение то оно должно подменяться на по-умолчанию.
Заранее благодарен.
...
Рейтинг: 0 / 0
07.12.2006, 14:10
    #34183316
autocommit
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом
да забыл дефолтные значения для параметра в idobj имеют null (думаю вообще завести для этого служебный объект для ускорения)
...
Рейтинг: 0 / 0
08.12.2006, 05:08
    #34184915
Бабичев Сергей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом
И мы все поняли, в какой таблице у тебя что хранится ...
Более того, нам даже стало понятно, как отличить параметр по умолчанию от рабочего параметра.
...
Рейтинг: 0 / 0
11.12.2006, 09:19
    #34189061
autocommit
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом
прошу прощения :) что не точно описал исходные данные:
таблица - type (хранятся наименования типов объектов)
таблица - obj (список объектов с сылкой на тип)
таблица - parname (список имен параметров для объектов определенного типа)
таблица - parval (хранит значения параметров для объектов) - если поле idobj - null тогда это параметр дефоултный для всех объектов данного типа;
...
Рейтинг: 0 / 0
11.12.2006, 11:28
    #34189548
Помогите с запросом
Смотрите в сторону ф-ции coalesce(a,b).
Если b - NULL, вернет a, иначе - b.
...
Рейтинг: 0 / 0
11.12.2006, 11:47
    #34189612
kamerad1981
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом
autocommitда забыл дефолтные значения для параметра в idobj имеют null (думаю вообще завести для этого служебный объект для ускорения)
Помоему это правильная идея. Но помоему в данной ситуации есть более простая реализация, т.к. paramname описывает параметры класса то и значение по умолчанию стоит внести в описание парметра, то есть чуть расширить таблицу
parname:
id
idtype
name
defvalue.
Создавать кортежи в таблице parval с idobj=null - противоричит объектно ориентированному подходу.
Внесем доработку в parval:
parval:
idparname
idobj
val - default NULL;
Тогда интересующий запрос будет выглядить следующим образом

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
  select [интересующие столбцы], defvalue as value
  from type inner join parname on (type.id = parname.idtype)
  inner join parval on (parname.id = parval.idparname)
  inner join obj on (obj.id = parval.idobj)
  where val is null
  
  union

  select [интересующие столбцы], val as value
  from type inner join parname on (type.id = parname.idtype)
  inner join parval on (parname.id = parval.idparname)
  inner join obj on (obj.id = parval.idobj)
  where val is not null

Естественно перечень [интересующие столбцы] должен совпадать в двух запросах
...
Рейтинг: 0 / 0
11.12.2006, 12:38
    #34189824
autocommit
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом
Огромное спасибо за подсказку.
Таблицы можно переработать. но есть одна загвоздка ! Таблиц, которые содержат значения параметров будет 3 (одна для чисел, вторая для дат, а третья для строки). Поэтому думаю реализовать таким образом.
При создании нового имени параметра для определенного типа создавать служебный объект, если его нет, для данного типа + сразу создается дефоултное значение для данного параметра и привязывать к этому служебному объекту. Получается, что у меня для каждого типа объектов будет обязательный объект который хранит все дефоултные значения данного типа.
Можно пойти и по пути, чтобы в описании параметра хранить и дефоултные значения, чтобы не создавать служебный объект, но тогда нужно 3 колонки каждого типа. Как будет быстрее при выборке не представляю пока себе.
...
Рейтинг: 0 / 0
11.12.2006, 13:20
    #34190029
kamerad1981
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом
autocommitТаблицы можно переработать. но есть одна загвоздка ! Таблиц, которые содержат значения параметров будет 3 (одна для чисел, вторая для дат, а третья для строки).

Мне кажется что здесь вы сойдете с правильного пути. Как я понял у вас есть желание реализовать объектно ориентированный принцип на РБД. Тут есть два варианта решения
1) изучить примеры переделки реляционной БД в объектно ориентированную БД (такие примеры есть, даже для postgres)
2) воспользоваться непосредственно ООБД.

Ваш вариант является половинчатым, то есть вы хотите переделать РБД в ООБД наполовину, помоему это не самое удачное решение.

Если цель реализовать ОО - подход и потом воспользоваться всеми его прелестями, то обратитесь лучше к п.1. Иначе лучше попытаться реализовать хранение данных методами РБД.
...
Рейтинг: 0 / 0
11.12.2006, 14:29
    #34190324
autocommit
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом
Спасибо за помощь буду думать :)
...
Рейтинг: 0 / 0
11.12.2006, 15:55
    #34190676
kamerad1981
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом
autocommitПри создании нового имени параметра для определенного типа создавать служебный объект, если его нет, для данного типа + сразу создается дефоултное значение для данного параметра и привязывать к этому служебному объекту. Получается, что у меня для каждого типа объектов будет обязательный объект который хранит все дефоултные значения данного типа.
Можно пойти и по пути, чтобы в описании параметра хранить и дефоултные значения, чтобы не создавать служебный объект, но тогда нужно 3 колонки каждого типа. Как будет быстрее при выборке не представляю пока себе.

Ну если продолжать в этом духе то получается три таблицы для описания параметров и три таблицы для описания их значений в объекте, тогда общий запрос будет состоять из объединения шести выборок.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите с запросом / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]