GD PLACE

Материал из GedeminWiki
(Различия между версиями)
Перейти к: навигация, поиск
 
(gd_place)
 
(не показаны 3 промежуточные версии 1 участника)
Строка 1: Строка 1:
=== qa_test ===
+
Иерархический справочник административно-территориальных единиц.
 +
 
 +
=== gd_place ===
  
 
{| border="1" cellpadding="2" cellspacing="0" style="border-collapse:collapse;"
 
{| border="1" cellpadding="2" cellspacing="0" style="border-collapse:collapse;"
Строка 12: Строка 14:
 
|parent
 
|parent
 
|[[dforeignkey]]
 
|[[dforeignkey]]
|[[Внешняя ссылка]] на родителя.
+
|[[Внешняя ссылка]] на вышележащий уровень. Например, область входит в страну, район в область, населенный пункт в район и т.д.
 
|- valign="top"
 
|- valign="top"
 
|lb
 
|lb
Строка 24: Строка 26:
 
|name
 
|name
 
|[[dname]]
 
|[[dname]]
|Наименование теста.
+
|Наименование административно-территориальной единицы.
 
|- valign="top"
 
|- valign="top"
|required_ruid
+
|placetype
|[[druid]]
+
|[[dplacetype]]
|[[РУИД]] настройки, от которой зависит данный тест. Если такая [[Настройка|настройка]] на базе не установлена, то тест выполняться не будет.
+
|Тип административно-территориальной единицы. Строка. Например: Страна, Область, Район, Город и т.п.
 
|- valign="top"
 
|- valign="top"
|functionkey
+
|telprefix
|[[dforeignkey]]
+
|[[dtext8]]
|Внешняя ссылка на скрипт-функцию теста.
+
|Телефонный код.
 
|- valign="top"
 
|- valign="top"
|ismandatory
+
|code
|[[dboolean]]
+
|[[dtext8]]
|Признак обязательного теста. Если флаг установлен и тест не выполнен (возникла ошибка), то все последующие тесты этого же уровня и всех вложенных уровней будут пропущены. Данный флаг полезен, например, в таком случае, когда некоторая функция подготавливает данные для последующих тестовых функций. Очевидно, что если она закончится неуспехом, то нет смысла выполнять последующие функции, так как без соответствующих данных они либо закончатся с ошибкой, либо приведут к ложноположительным результатам.
+
|Числовой код административно-территориальной единицы.
 
|- valign="top"
 
|- valign="top"
|timelimit
+
|editiondate
|[[time]]
+
|[[deditiondate]]
|Если указано -- предельное время выполнения теста.
+
|Дата и время последнего исправления.
 
|}
 
|}
 +
 +
=== Проверка уникальности имени ===
 +
 +
Два триггера гарантируют уникальность имени административно-территориальной единицы на одном уровне.
 +
 +
<pre>
 +
 +
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 ; ^
 +
 +
</pre>
 +
 +
[[Category:База данных]]

Текущая версия на 16:27, 8 июня 2013

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

[править] 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 ; ^

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

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