Главная страница


su.dbms

 
 - SU.DBMS ----------------------------------------------------------------------
 From : ЏгвЁ«Ё­ …ўЈҐ­Ё© ‚ «Ґ­вЁ­®ўЁз         2:5020/400     14 Mar 2003  13:22:22
 To : All
 Subject : постреляционные базы данных, способ реализации в IB/FB
 -------------------------------------------------------------------------------- 
 
 Hi All,
 
 Это родилось после детального изучения статьи ООП в РСУБД автор Владимир
 Котляревский http://www.ibase.ru/devinfo/oop_rdbms.htm
 Данные для описания примеров взяты из данной статьи.
 Предпосылки 
  1.В главе "Хранение более сложных объектов", есть такая фраза: " Hедостатки -
 не совсем тривиальна система сохранения и загрузки объектов, есть сложности с
 организацией наследования типов." Данный пример показывает как избавиться с
 помощью "бубна"(view+trigger's) от сложностью с загрузкой и сохранением
 объектов.
  2.В Cahe' есть такое свойство если мы наследуем одну таблицу от другой, то
 при появлении записи в потомке он автоматически появляется в таблице предка. И
 соответственно изменение в потомке атрибутов предка влечет изменение записи в
 предке. 
 
 Решение задачи: 
 1.Делаем таблицу наследника с расширением "_R"
 2.Делаем View из двух таблиц со всеми полями убирая дублирование PK.
 3.Пишем триггера на вставку удаление и изменение данных.
  Это позволяет работать с наследованием в РСУБД, как будто это встроенный
 механизм. Это-то пример чисто академический, может неоднократно улучшаться,
 поддержка множественного наследования, Изменение triger's на более
 интеллектуальные, чтобы записи изменялись только для той таблице к которой они
 относятся. И т.д.
 
 Далее скрипт.
 create domain TOID as integer not null;
 create table OBJECTS(
    OID TOID primary key,
    ClassId TOID,
    Name varchar(32),
    Description varchar(128),
    Deleted smallint,
    Creation_date timestamp default 'now',
    Change_date timestamp default 'now',
    Owner TOID);
 create table Orders_R (
    OID TOID primary key, 
    customer TOID, 
    sum_total NUMERIC(15,2),
    foreign key (OID) references OBJECTS on update cascade on delete cascade);
 
 create view  Orders (
    OID,
    ClassId,
    Name,
    Description,
    Deleted,
    Creation_date,
    Change_date,
    Owner,
    customer,
    sum_total) as
 select a.OID,
    ClassId,
    Name,
    Description,
    Deleted,
    Creation_date,
    Change_date,
    Owner,
    customer,
    sum_total
 from objects a join orders_r b on
 a.oid=b.oid;
 set term^;
 create trigger Ordes_insert for Orders before insert
 as
 begin
 insert into OBJECTS(   OID,
    ClassId,
    Name,
    Description,
    Deleted,
    Creation_date,
    Change_date,
    Owner)values(
       new.OID,
    new.ClassId,
    new.Name,
    new.Description,
    new.Deleted,
    new.Creation_date,
    new.Change_date,
    new.Owner);
 insert into orders_r(OID,customer,
    sum_total)values(
       new.OID,
       new.customer,
       new.sum_total);
 end
 ^
 create trigger Ordes_update for Orders before update
 as
 begin
 update OBJECTS set OID=new.OID,
    ClassId=new.ClassId,
    Name=new.Name,
    Description=new.Description,
    Deleted=new.Deleted,
    Creation_date=new.Creation_date,
    Change_date=new.Change_date,
    Owner=new.Owner
    where OID=old.OID;
 update  orders_r set
    customer=new.customer,
    sum_total=new.sum_total
    where OID=new.OID;/*Именно new.OID а не old.OID т.к. 
                      существует cascade update на FK*/
 end
 ^
 create trigger Ordes_delete for Orders after delete
 as
 begin
 delete from  OBJECTS
    where OID=old.OID;
 end
 ^
 
 set term ;^
 p.s. Это наверняка очередной велосипед, но как удобен :-).
 
 С уваженим Путилин Евгений.
 
 С уважением Путилин Евгений Валентинович
 
 --- ifmail v.2.15dev5
  * Origin: FidoNet Online - http://www.fido-online.com (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 постреляционные базы данных, способ реализации в IB/FB   ЏгвЁ«Ё­ …ўЈҐ­Ё© ‚ «Ґ­вЁ­®ўЁз   14 Mar 2003 13:22:22 
 Re: постреляционные базы данных, способ реализации в IB/FB   Ilya Zvyagin   14 Mar 2003 15:05:54 
 Re: постреляционные базы данных, способ реализации в IB/FB   ЏгвЁ«Ё­ …ўЈҐ­Ё© ‚ «Ґ­вЁ­®ўЁз   14 Mar 2003 18:49:55 
 Re: постреляционные базы данных, способ реализации в IB/FB   Ilya Zvyagin   17 Mar 2003 15:34:38 
 Re: постреляционные базы данных, способ реализации в IB/FB   ЏгвЁ«Ё­ …ўЈҐ­Ё© ‚ «Ґ­вЁ­®ўЁз   17 Mar 2003 16:16:07 
 Re: постреляционные базы данных, способ реализации в IB/FB   Ilya Zvyagin   18 Mar 2003 21:10:30 
 Re: постреляционные базы данных, способ реализации в IB/FB   Andrei N. Sobchuck   14 Mar 2003 16:02:10 
 Re: постреляционные базы данных, способ реализации в IB/FB   ЏгвЁ«Ё­ …ўЈҐ­Ё© ‚ «Ґ­вЁ­®ўЁз   14 Mar 2003 18:50:57 
 Re: постреляционные базы данных, способ реализации в IB/FB   Serguei Tarassov   15 Mar 2003 04:10:22 
 Re: постреляционные базы данных, способ реализации в IB/FB   Dmitry Kirillov   19 Mar 2003 12:31:11 
Архивное /su.dbms/16679ce47f395.html, оценка 3 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional