1 февр. 2011 г.

ORM с помощью updateable view

Бизнес-объекты скрывают от программиста реляционную структуру данных конкретной сущности (т.н. ORM). Например, последовательность методов Insert-заполнение полей-Post объекта типа TgdcCompany приведет к трем операциям INSERT в базу данных внутри метода InternalPostRecord, в таблицы gd_contact, gd_company и gd_companycode.

Такого же эффекта можно достичь средствами одного только SQL, используя обновляемые представления (updateable view).

Создадим представление для отображения данных бизнес-объекта Компания:
create view vcompany as
  select * from
    gd_contact c 
    join gd_company co on c.id=co.contactkey
    left join gd_companycode cc on cc.companykey = c.id
Создадим триггер:
recreate trigger vcompany_ai for vcompany
  after insert
  position 0
as
  declare variable id integer;
begin
  if (NEW.id IS NULL) then
    id = GEN_ID(gd_g_unique, 1);
  else
    id = NEW.id;
  insert into gd_contact (id, parent, contacttype, name)
    values (:id, NEW.parent, 3, NEW.name);
  insert into gd_company (contactkey, fullname)
    values (:id, NEW.name);
end
Теперь добавить компанию в базу данных можно с помощью команды:
insert into vcompany (name, parent)
  values ('Company name', some_existing_folder_id)
Аналогичным образом реализуем обновление и удаление данных.

Комментариев нет:

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