Инфраструктура таблицы с идентификатором

Материал из GedeminWiki
(Различия между версиями)
Перейти к: навигация, поиск
(Новая страница: «Простая таблица содержит, из системных полей, поле id для хранения уникального идентификат…»)
 
 
(не показаны 6 промежуточных версий 2 участников)
Строка 1: Строка 1:
Простая таблица содержит, из системных полей, поле id для хранения уникального идентификатора записи, поле editiondate для хранения даты изменения и добавления записи, поле editorkey для хранения id пользователя, который модифицировал запись. Поля заполняются триггерами, имена которых формируются по определенной схеме. В таблице ниже приведены примеры имен для таблицы из эталонной базы данных и для пользовательской таблицы.
+
Из системных полей таблица с идентификатором содержит:
 +
 
 +
* id — для хранения уникального идентификатора записи,  
 +
* editiondate — для хранения даты изменения и добавления записи,  
 +
* editorkey — для хранения идентификатора пользователя, который редактировал запись.  
 +
 
 +
Поля заполняются триггерами, имена которых формируются по определенной схеме. В таблице ниже приведены примеры имен для таблицы из эталонной базы данных и для пользовательской таблицы.
 +
 
 +
{| border="1" cellpadding="4" cellspacing="0" style="border-collapse:collapse;"
 +
!style="background:#ffdead;"| N
 +
!style="background:#ffdead;"| Описание объекта
 +
!style="background:#ffdead;"| Таблица RP_REPORTTEMPLATE
 +
!style="background:#ffdead;"| Таблица USR$FA_TYPE
 +
|-
 +
| 1
 +
| Триггер для присвоения уникального идентификатора
 +
| RP_BI_REPORTTEMPLATE
 +
| USR$BI_USR$FA_TYPE
 +
|-
 +
| 2
 +
| Триггер для присвоения времени и пользователя при вставке новой записи.
 +
| RP_BI_REPORTTEMPLATE5
 +
| USR$BI_FA_TYPE5
 +
|-
 +
| 3
 +
| Триггер для присвоения времени и пользователя при изменении записи.
 +
| RP_BU_REPORTTEMPLATE5
 +
| USR$BU_FA_TYPE5
 +
|}
 +
 
 +
Код триггеров раскрыт ниже на примере таблицы [[RP REPORTTEMPLATE]]:
 +
 
 +
=== Триггер на вставку записи (присвоение уникального ИД) ===
 +
 
 +
<syntaxhighlight lang="SQL">
 +
CREATE OR ALTER TRIGGER RP_BI_REPORTTEMPLATE FOR RP_REPORTTEMPLATE
 +
  ACTIVE
 +
  BEFORE INSERT
 +
  POSITION 0
 +
AS
 +
BEGIN
 +
  IF (NEW.id IS NULL) THEN
 +
    NEW.id = GEN_ID(gd_g_offset, 0) + GEN_ID(gd_g_unique, 1);
 +
END
 +
</syntaxhighlight>
 +
 
 +
=== Триггер на вставку записи(присвоение времени и пользователя) ===
 +
 
 +
<syntaxhighlight lang="SQL">
 +
CREATE OR ALTER TRIGGER RP_BI_REPORTTEMPLATE5 FOR RP_REPORTTEMPLATE
 +
  ACTIVE
 +
  BEFORE INSERT
 +
  POSITION 5
 +
AS
 +
BEGIN
 +
  IF (NEW.editorkey IS NULL) THEN
 +
    NEW.editorkey = 650002;
 +
IF (NEW.editiondate IS NULL) THEN
 +
    NEW.editiondate = CURRENT_TIMESTAMP;
 +
END
 +
</syntaxhighlight>
 +
 
 +
=== Триггер на изменение записи(присвоение времени и пользователя) ===
 +
 
 +
<syntaxhighlight lang="SQL">
 +
CREATE OR ALTER TRIGGER RP_BU_REPORTTEMPLATE5 FOR RP_REPORTTEMPLATE
 +
  ACTIVE
 +
  BEFORE UPDATE
 +
  POSITION 5
 +
AS
 +
BEGIN
 +
  IF (NEW.editorkey IS NULL) THEN
 +
    NEW.editorkey = 650002;
 +
  IF (NEW.editiondate IS NULL) THEN
 +
    NEW.editiondate = CURRENT_TIMESTAMP;
 +
END
 +
</syntaxhighlight>
 +
 
 +
==== См. также ====
 +
 
 +
* [[Инфраструктура простой таблицы с идентификатором]]
 +
* [[Инфраструктура интервальных деревьев]]
 +
* [[Инфраструктура таблицы простое дерево]]
 +
* [[Инфраструктура таблицы со ссылкой]]
 +
 
 +
__NOTOC__
 +
 
 +
[[Category:Руководство разработчика]]
 +
[[Category:Учебный курс]]
 +
[[Category:База данных]]

Текущая версия на 15:39, 17 апреля 2012

Из системных полей таблица с идентификатором содержит:

  • id — для хранения уникального идентификатора записи,
  • editiondate — для хранения даты изменения и добавления записи,
  • editorkey — для хранения идентификатора пользователя, который редактировал запись.

Поля заполняются триггерами, имена которых формируются по определенной схеме. В таблице ниже приведены примеры имен для таблицы из эталонной базы данных и для пользовательской таблицы.

N Описание объекта Таблица RP_REPORTTEMPLATE Таблица USR$FA_TYPE
1 Триггер для присвоения уникального идентификатора RP_BI_REPORTTEMPLATE USR$BI_USR$FA_TYPE
2 Триггер для присвоения времени и пользователя при вставке новой записи. RP_BI_REPORTTEMPLATE5 USR$BI_FA_TYPE5
3 Триггер для присвоения времени и пользователя при изменении записи. RP_BU_REPORTTEMPLATE5 USR$BU_FA_TYPE5

Код триггеров раскрыт ниже на примере таблицы RP REPORTTEMPLATE:

[править] Триггер на вставку записи (присвоение уникального ИД)

CREATE OR ALTER TRIGGER RP_BI_REPORTTEMPLATE FOR RP_REPORTTEMPLATE
  ACTIVE 
  BEFORE INSERT 
  POSITION 0
AS
BEGIN
  IF (NEW.id IS NULL) THEN
    NEW.id = GEN_ID(gd_g_offset, 0) + GEN_ID(gd_g_unique, 1);
END

[править] Триггер на вставку записи(присвоение времени и пользователя)

CREATE OR ALTER TRIGGER RP_BI_REPORTTEMPLATE5 FOR RP_REPORTTEMPLATE
  ACTIVE 
  BEFORE INSERT 
  POSITION 5
AS
BEGIN
  IF (NEW.editorkey IS NULL) THEN
    NEW.editorkey = 650002;
 IF (NEW.editiondate IS NULL) THEN
    NEW.editiondate = CURRENT_TIMESTAMP;
END

[править] Триггер на изменение записи(присвоение времени и пользователя)

CREATE OR ALTER TRIGGER RP_BU_REPORTTEMPLATE5 FOR RP_REPORTTEMPLATE
  ACTIVE 
  BEFORE UPDATE 
  POSITION 5
AS
BEGIN
  IF (NEW.editorkey IS NULL) THEN
    NEW.editorkey = 650002;
  IF (NEW.editiondate IS NULL) THEN
    NEW.editiondate = CURRENT_TIMESTAMP;
END

[править] См. также

Персональные инструменты
Пространства имён

Варианты
Действия
Навигация
Инструменты