Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Периодические реквизиты  [new]
Plisteron
Member

Откуда:
Сообщений: 12
Суть вопроса такова.
Есть таблица, скажем, продающихся алкогольных напитков. У каждого напитка, кроме названия, есть ещё следующие свойства: цена, поставщик, номер договора, материально-ответственное лицо и т.п., которые с течением времени могут изменяться. Можно сделать, например, так:
CREATE TABLE drinks
(
    id INTEGER,
    drink_name VARCHAR2 (200),
    CONSTRAINT drink_pk PRIMARY KEY (id)
);
CREATE TABLE drink_price
(
    drink_id INTEGER,
    price_date DATE, -- с этой даты действует цена
    price NUMBER (7, 2),
    CONSTRAINT drink_price_pk PRIMARY KEY (drink_id, price_date),
    CONSTRAINT drink_price_fk_drinks FOREIGN KEY (drink_id) REFERENCES drinks (id)
);
-- и то же самое с номером договора и мат.-отв. лицом.
Вопрос: не поможет ли кто с SQL-запросом, который бы выводил для указанного напитка таблицу, в которой каждая строка содержит дату изменения какого-либо из атрибутов и значения всех атрибутов, действующих на эту дату? Т.е. каково было общее количество изменений всех этих периодических атрибутов, столько и будет и строк; короче говоря, хочется сделать примерно то же, что и периодические атрибуты в Одном Эсе. Или, может быть, лучше использовать для периодических атрибутов вложенные таблицы?
В качестве СУБД использую Oracle 10g Express. До этого работал с Oracle 9i. Может быть, "десятка" содержит какие-нибудь более подходящие для моей задачи средства, да я об этом не знаю?
5 апр 07, 16:31    [3985827]     Ответить | Цитировать Сообщить модератору
 Re: Периодические реквизиты  [new]
searcher_
Member

Откуда:
Сообщений: 39
либо давайте конкретнее что вам нужно, либо
select *
  from drinks d,
       drink_price p
--.....все таблицы
 where d.id=p.drink_id (+)
--....все связи 
5 апр 07, 16:53    [3986026]     Ответить | Цитировать Сообщить модератору
 Re: Периодические реквизиты  [new]
ModelR
Member

Откуда: Нижний Новгород
Сообщений: 1798
1)Можно не выводить, а так и хранить
CREATE TABLE drink_event
(
    drink_id INTEGER,
    event_date DATE, -- с этой даты действует цена  и проч.
    price NUMBER (7, 2),
    -- номер договора 
    -- мат.-отв. лицо
    CONSTRAINT drink_event_pk PRIMARY KEY (drink_id, event_date),
    CONSTRAINT drink_event_fk_drinks FOREIGN KEY (drink_id) REFERENCES drinks (id)
);
Обновлять через свой API типа set_drink_price(drink_id, date, price )

2) В 10g есть Workspace Manager, который среди прочих фич поддерживает темпоральные данные, но это далеко не чистый SQL.
5 апр 07, 18:35    [3986881]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить