GD PLACE
Материал из GedeminWiki
Иерархический справочник административно-территориальных единиц.
gd_place
| Имя поля | Тип данных | Описание |
|---|---|---|
| id | dintkey | Первичный ключ. |
| parent | dforeignkey | Внешняя ссылка на вышележащий уровень. Например, область входит в страну, район в область, населенный пункт в район и т.д. |
| lb | dlb | Левая граница интервала. |
| rb | drb | Правая граница интервала. |
| name | dname | Наименование административно-территориальной единицы. |
| placetype | dplacetype | Тип административно-территориальной единицы. Строка. Например: Страна, Область, Район, Город и т.п. |
| telprefix | dtext8 | Телефонный код. |
| code | dtext8 | Числовой код административно-территориальной единицы. |
| editiondate | deditiondate | Дата и время последнего исправления. |
Проверка уникальности имени
Два триггера гарантируют уникальность имени административно-территориальной единицы на одном уровне.
CREATE EXCEPTION gd_e_placeexists 'Place already exists';
SET TERM ^ ;
CREATE TRIGGER gd_bi_place FOR gd_place
BEFORE INSERT
POSITION 0
AS
BEGIN
IF (NEW.ID IS NULL) THEN
NEW.ID = GEN_ID(gd_g_unique, 1) + GEN_ID(gd_g_offset, 0);
IF (EXISTS(SELECT * FROM gd_place WHERE COALESCE(parent, 0) = COALESCE(NEW.parent, 0)
AND UPPER(name) = UPPER(NEW.name))) THEN
BEGIN
EXCEPTION gd_e_placeexists;
END
END
^
CREATE TRIGGER gd_bu_place FOR gd_place
BEFORE UPDATE
POSITION 0
AS
BEGIN
IF (EXISTS(SELECT * FROM gd_place WHERE COALESCE(parent, 0) = COALESCE(NEW.parent, 0)
AND UPPER(name) = UPPER(NEW.name)
AND ID <> NEW.id)) THEN
BEGIN
EXCEPTION gd_e_placeexists;
END
END
^
SET TERM ; ^