GD PLACE

Материал из GedeminWiki
(Различия между версиями)
Перейти к: навигация, поиск
(gd_place)
Строка 1: Строка 1:
 +
Иерархический справочник административно-территориальных единиц.
 +
 
=== gd_place ===
 
=== gd_place ===
  
Строка 12: Строка 14:
 
|parent
 
|parent
 
|[[dforeignkey]]
 
|[[dforeignkey]]
|[[Внешняя ссылка]] на родителя.
+
|[[Внешняя ссылка]] на вышележащий уровень. Например, область входит в страну, район в область, населенный пункт в район и т.д.
 
|- valign="top"
 
|- valign="top"
 
|lb
 
|lb
Строка 28: Строка 30:
 
|placetype
 
|placetype
 
|[[dplacetype]]
 
|[[dplacetype]]
|[[РУИД]] настройки, от которой зависит данный тест. Если такая [[Настройка|настройка]] на базе не установлена, то тест выполняться не будет.
+
|Тип административно-территориальной единицы. Строка. Например: Страна, Область, Район, Город и т.п.
 
|- valign="top"
 
|- valign="top"
 
|telprefix
 
|telprefix
 
|[[dtext8]]
 
|[[dtext8]]
|Внешняя ссылка на скрипт-функцию теста.
+
|Телефонный код.
 
|- valign="top"
 
|- valign="top"
 
|code
 
|code
 
|[[dtext8]]
 
|[[dtext8]]
|
+
|Числовой код административно-территориальной единицы.
 
|}
 
|}
  

Версия 14:40, 28 февраля 2007

Иерархический справочник административно-территориальных единиц.

gd_place

Имя поля Тип данных Описание
id dintkey Первичный ключ.
parent dforeignkey Внешняя ссылка на вышележащий уровень. Например, область входит в страну, район в область, населенный пункт в район и т.д.
lb dlb Левая граница интервала.
rb drb Правая граница интервала.
name dname Наименование административно-территориальной единицы.
placetype dplacetype Тип административно-территориальной единицы. Строка. Например: Страна, Область, Район, Город и т.п.
telprefix dtext8 Телефонный код.
code dtext8 Числовой код административно-территориальной единицы.

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

Два триггера гарантируют уникальность имени административно-территориальной единицы на одном уровне.


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 ; ^

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

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