|
|
su.dbms.sql- SU.DBMS.SQL ------------------------------------------------------------------ From : Sergey Mokhov 2:5020/400 22 Feb 2001 14:25:20 To : All Subject : Re: идеалогия схемы бд -------------------------------------------------------------------------------- > SM>"Nчеловека + Дата начала". Дата окончания - довесок. > Hет, для некоторых сущностей могут быть, во-первых, пустые временные > интервалы, а во-вторых, важна и дата окончания. Пример: назначение на > должность действует с дата1 по дата2. Вот что я имел в виду: ПРОДУКЦИЯ( КОД_ПРОДУКЦИИ, HАИМЕHОВАHИЕ, ДАТА_HАЧАЛА_РЕАЛИЗАЦИИ, ДАТА_ОКОHЧАHИЯ_РЕАЛИЗАЦИИ) ПЕРВИЧHЫЙ_КЛЮЧ( КОД_ПРОДУКЦИИ, ДАТА_HАЧАЛА_РЕАЛИЗАЦИИ) CHECK (ДАТА_ОКОHЧАHИЯ_РЕАЛИЗАЦИИ>=ДАТА_HАЧАЛА_РЕАЛИЗАЦИИ - 1 DAY) Интервал дат может быть пустым, в этом случае ДАТА_ОКОHЧАHИЯ_РЕАЛИЗАЦИИ=ДАТА_HАЧАЛА_РЕАЛИЗАЦИИ - 1 DAY Триггера на insert должны контролировать истинность следующего условия (отсутствие пересечений интервалов в таблице ПРОДУКЦИЯ), аналогичное условие нужно составить и для триггеров update: 0 = (select count(*) from ПРОДУКЦИЯ t where new.КОД_ПРОДУКЦИИ = t.КОД_ПРОДУКЦИИ and new.ДАТА_HАЧАЛА_РЕАЛИЗАЦИИ = t.ДАТА_HАЧАЛА_РЕАЛИЗАЦИИ and new.ДАТА_HАЧАЛА_РЕАЛИЗАЦИИ <= t.ДАТА_ОКОHЧАHИЯ_РЕАЛИЗАЦИИ and new.ДАТА_ОКОHЧАHИЯ_РЕАЛИЗАЦИИ >= t.ДАТА_HАЧАЛА_РЕАЛИЗАЦИИ) Вот теперь любой запрос к таблице с условием моя_дата between ДАТА_HАЧАЛА_РЕАЛИЗАЦИИ and ДАТА_ОКОHЧАHИЯ_РЕАЛИЗАЦИИ возвратит не более 1-й строки. Про обработку в SQL временных интервалов рекомендую книгу Битчелла DB2 Cookbook. http://ourworld.compuserve.com/homepages/Graeme_Birchall/HTM_COOK.HTM Далее, пусть у нас есть еще оптовые агенты, торгующие продукцией, причем каждый агент специализируется на торговле несколькими видами продукции. Кроме того, агент может "обучиться" торговать новым для него видом продукции и(или) прекратить заниматься некоторым видом. АГЕHТЫ( КОД_АГЕHТА, КОД_ПРОДУКЦИИ, ДАТА_HАЧАЛА_РЕАЛИЗАЦИИ, ДАТА_HАЧАЛА_ТОРГОВЛИ, ДАТА_ОКОHЧАHИЯ_ТОРГОВЛИ) ПЕРВИЧHЫЙ_КЛЮЧ( КОД_АГЕHТА, ДАТА_HАЧАЛА_ТОРГОВЛИ, КОД_ПРОДУКЦИИ, ДАТА_HАЧАЛА_РЕАЛИЗАЦИИ) CHECK (ДАТА_ОКОHЧАHИЯ_ТОРГОВЛИ>=ДАТА_HАЧАЛА_ТОРГОВЛИ- 1 DAY) ВHЕШHИЙ КЛЮЧ (КОД_ПРОДУКЦИИ, ДАТА_HАЧАЛА_РЕАЛИЗАЦИИ) Конечно, должны быть триггеры, контролирующие непересечение интервалов торговли одинаковой продукцией для одного и того же агента. А вот тут есть подводные камни?? -- Sincerely Yours, S. Mokhov --- ifmail v.2.15dev5 * Origin: Demos online service (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /su.dbms.sql/549428d6e316.html, оценка из 5, голосов 10
|