Инфраструктура таблицы с идентификатором
Материал из GedeminWiki
(Различия между версиями)
Evgeny (обсуждение | вклад) |
Evgeny (обсуждение | вклад) |
||
| (не показаны 2 промежуточные версии 2 участников) | |||
| Строка 1: | Строка 1: | ||
| − | + | Из системных полей таблица с идентификатором содержит: | |
| + | |||
| + | * id — для хранения уникального идентификатора записи, | ||
| + | * editiondate — для хранения даты изменения и добавления записи, | ||
| + | * editorkey — для хранения идентификатора пользователя, который редактировал запись. | ||
| + | |||
| + | Поля заполняются триггерами, имена которых формируются по определенной схеме. В таблице ниже приведены примеры имен для таблицы из эталонной базы данных и для пользовательской таблицы. | ||
{| border="1" cellpadding="4" cellspacing="0" style="border-collapse:collapse;" | {| border="1" cellpadding="4" cellspacing="0" style="border-collapse:collapse;" | ||
| Строка 23: | Строка 29: | ||
|} | |} | ||
| − | + | Код триггеров раскрыт ниже на примере таблицы [[RP REPORTTEMPLATE]]: | |
| − | === Триггер на вставку записи(присвоение уникального ИД) === | + | === Триггер на вставку записи (присвоение уникального ИД) === |
<syntaxhighlight lang="SQL"> | <syntaxhighlight lang="SQL"> | ||
| Строка 43: | Строка 49: | ||
<syntaxhighlight lang="SQL"> | <syntaxhighlight lang="SQL"> | ||
CREATE OR ALTER TRIGGER RP_BI_REPORTTEMPLATE5 FOR RP_REPORTTEMPLATE | CREATE OR ALTER TRIGGER RP_BI_REPORTTEMPLATE5 FOR RP_REPORTTEMPLATE | ||
| − | ACTIVE BEFORE INSERT POSITION 5 | + | ACTIVE |
| + | BEFORE INSERT | ||
| + | POSITION 5 | ||
AS | AS | ||
BEGIN | BEGIN | ||
| Строка 57: | Строка 65: | ||
<syntaxhighlight lang="SQL"> | <syntaxhighlight lang="SQL"> | ||
CREATE OR ALTER TRIGGER RP_BU_REPORTTEMPLATE5 FOR RP_REPORTTEMPLATE | CREATE OR ALTER TRIGGER RP_BU_REPORTTEMPLATE5 FOR RP_REPORTTEMPLATE | ||
| − | ACTIVE BEFORE UPDATE POSITION 5 | + | ACTIVE |
| + | BEFORE UPDATE | ||
| + | POSITION 5 | ||
AS | AS | ||
BEGIN | BEGIN | ||
| Строка 66: | Строка 76: | ||
END | END | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| + | |||
| + | ==== См. также ==== | ||
| + | |||
| + | * [[Инфраструктура простой таблицы с идентификатором]] | ||
| + | * [[Инфраструктура интервальных деревьев]] | ||
| + | * [[Инфраструктура таблицы простое дерево]] | ||
| + | * [[Инфраструктура таблицы со ссылкой]] | ||
__NOTOC__ | __NOTOC__ | ||
Текущая версия на 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