Инфраструктура таблицы с идентификатором
Материал из GedeminWiki
(Различия между версиями)
Evgeny (обсуждение | вклад) |
Evgeny (обсуждение | вклад) |
||
| (не показаны 4 промежуточные версии 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;" | ||
| Строка 22: | Строка 28: | ||
| USR$BU_FA_TYPE5 | | 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