Перейти к содержанию

Структура таблицы

Редактирование структуры таблицы доступно через её контекстное меню в режимах отображения «Таблица» или «Двойной вид».

После нажатия на кнопку открывается окно «Редактирование структуры», в котором отображается таблица параметров объектов слоя (наименования колонок) и их тип данных.

Примечание: Колонке слоя соответствует столбец таблицы в базе данных (СУБД PostgreSQL).

Создание колонки

При нажатии на кнопку в окне «Редактирование структуры» открывается окно «Создание колонки», в котором отображаются параметры, указываемые при добавлении новой колонки.

Примечание: При отсутствии параметра «Название» колонка будет отображаться с параметром «Код».

Изменение колонки

При нажатии на кнопку в контекстном меню колонки в окне «Редактирование структуры» или двойным нажатием по названию колонки открывается окно «Редактирование колонки».

Содержание окна «Редактирование колонки» для изменения свойств аналогично окну «Создание колонки».

Примечание: При изменении типа колонки возможна потеря данных, если типы являются неприводимыми (например, дата и файл).

Типы колонок

При создании или изменении колонки доступен выбор из следующих типов данных:

  • Текст – однострочный текст заданной длины;
  • Целое число – целочисленное значение (integer);
  • Дробное число – дробное значение (double_precision);
  • Геометрия – геометрия объекта;
  • Логический – логическое значение true/false (да/нет);
  • Дата/время – дата и время (без часового пояса);
  • JSON – хранение данных типа JSON (jsonb);
  • UUID – универсальный уникальный идентификатор;
  • Заголовок – специальный тип колонки, позволяющий вкладывать в неё другие колонки и таким образом создавать древовидную структуру;
  • Файл – один или несколько файлов;
  • Любой тип PostgreSQL – любой тип PostgreSQL, обязательно требует указания типа (db_type).

Геометрия

Тип данных «Геометрия» используется для указания пространственных данных. В поле «Тип геометрии» предлагается выбор из основных типов:

  • Point - точка;
  • LineString - линия, связывающая 2 и более точки;
  • Polygon - полигон (многоугольник);
  • MultiPoint - набор точек;
  • MultiLineString - набор линий;
  • MultiPolygon - набор полигонов.

В поле «Идентификатор SRS» указывается тип проекции, в котором представлены пространственные данные. При вводе значения появляется список подходящих проекций.

Параметр «Индекс» задается для колонок, которые должны определять геометрию объекта для отображения на карте.

Если для нескольких геометрических колонок одновременно включен чек-бокс «Индекс», то в качестве колонки для отображения геометрии на карте будет использована колонка типа «Геометрия» с кодом geom, даже если она не является индексируемой. Если такое поле отсутствует в структуре таблицы, в таком случае колонка, ответственная за отображение объектов на карте, назначена не будет.

Параметр «Возможность значения NULL» описан ниже.

UUID

UUID записывается в виде последовательности шестнадцатеричных цифр в нижнем регистре, разделённых знаками минуса на несколько групп, в таком порядке: группа из 8 цифр, затем три группы из 4 цифр, и в конце группа из 12 цифр. Итоговый идентификатор содержит 32 цифры и занимает 128 бит. Пример UUID в этом стандартном виде:

UUID: a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11
Примечание: Также принимаются альтернативные варианты: цифры в верхнем регистре, стандартная запись, заключённая в фигурные скобки, запись без минусов или с минусами, разделяющими любые группы из четырёх цифр. Отображается всегда в стандартном виде с минусами.

Любой тип PostgreSQL

Любой тип PostgreSQL, обязательно требует указания типа (db_type) в поле «Физический тип». Типы данных в PostgreSQL описаны в официальной документации к СУБД.

Примечание: При отсутствии значения в поле «Физический тип» колонке присваивается тип данных «Текст».

Примечание: Ниже описываются основные поля, заполняемые при создании (изменении) колонки.

Формат значений

Форматирование значений позволяет настраивать отображение данных в приложении. Данные в указанном формате будут отображаться в таблице, а также на картах и в информационных окнах объектов.

Примечание: Форматирование данных меняет только их отображение, при этом оставляя сами хранимые в БД значения неизменными.

Установить и изменить форматирование данных можно для уже существующих и только создаваемых колонок таблиц. Для этого следует в поле «Формат» указать SQL-выражение, параметры которого настроят необходимое отображение объектов.

Примечание: Форматирование значений неприменимо к столбцам типа Заголовок и Файл, а для колонки типа Геомерия допустимо форматирование только при условии, что снят параметр индекс, то есть данный столбец не хранит геометрию объекта для отображения на карте.
Примечание: Используемые строковые составляющие SQL-выражения следует заключать в одинарные кавычки.

В таблице ниже представлены примеры возможных настроек формата выводимых значений различных типов.

Тип данных Выражение Описание
Число trunc($col) Отбрасывает дробную часть без округления
round($col) Отбрасывает дробную часть с округлением
round($col::numeric, N) Округляет дробную часть до N знаков после запятой
to_char($col, '999 999 999 999') Добавляет пробелы триадам целых чисел
to_char($col, '999 999 999D999') Добавляет пробелы триадам чисел с явным указанием дробной части
Примечание: Если при задании формата числа указать меньше цифр, чем значащих цифр в самом числе, то в результате будет выводиться строка из # согласно указанному формату.
concat($col, ' ₽') Добавляет к числу указание на единицу измерения (валюта / единица площади / и т.д.)
concat(round(($col *100)::numeric, 2), '%') Выводит дробное число как процент
Текст lower($col) Выводит весь текст строчными буквами
upper($col) Выводит весь текст заглавными буквами
initcap($col) Выводит каждое слово с заглавной буквы
upper(substring($col from 1 for 1)) || lower(substring($col from 2)) Выводит только первое слово с заглавной буквы
concat('Город: ', $col) Добавляет указание на населённый пункт (город)
Дата to_char($col AT TIME ZONE 'UTC+3', 'DD/MM/YYYY') Выводит дату в формате ДД/ММ/ГГГГ с учетом указанного часового пояса
Логический cast($col as int) Выводит значение цифрой (0 — Нет, 1 — Да)
cast($col as bool) Выводит значение как true / false
Примечание: Запись вида $col указывает на использование текущей колонки таблицы, допустима также запись самого кода колонки. При обращении к другим колонкам следует указывать их код.

При задании форматирования можно использовать это условнную конструкцию CASE, которая позволяет осуществить проверку условий и возвратить в зависимости от выполнения того или иного условия различный результат:

CASE WHEN <условие> THEN <результат> [WHEN ...] [ELSE <результат>] END

Также задание определенного выражения форматирования позволяет настроить отображение списковых значений согласно данным из колонки другой таблицы. Колонка-справочник содержит в себе перечень значений, которые могут в дальнейшем быть указаны для объектов других таблиц.

Примечание: Таблица с колонкой-справочником может находиться как в одной карте вместе со слоем, для колонки которого указываются списковые значения, так и в другой карте этого же проекта. Колонки, подходящие для использования в качестве справочника, могут быть справочниками сразу для нескольких других колонок, которые могут находиться в разных слоях и разных картах.

Пример выражения форматирования для отображения текстовых значений согласно указанному коду:

(SELECT <column_value> FROM <map>.<table> WHERE <table>.<code> = $col LIMIT 1)
В данном случае шаблонные коды имеют следущие обозначения:

  • <column_value> — код колонки-справочника, хранящей значения для отображения;
  • <map> — код карты, в которой расположена таблица с колонкой-справочником;
  • <table> — код таблицы, содержащей колонку-справочник;
  • <code> — код колонки из таблицы со справочником, со значениями которой будет определяться соответствие указанных в форматируемой колонке данных;
  • $col — значение текущей колонки, для которой выполняется форматирование, допустимо прямое указание ее кода;
  • LIMIT 1 — служебное выражение, обеспечивающее единственное совпадение значений.

При отсутствии найденного совпадения в таблице объектов будет отображаться заданное в колонке значение.

Примечание: Следует помнить, что форматирирование не заменяет самих хранимых в объектах данных, а только меняет их отображение.

Значение по умолчанию

Позволяет указать значение по умолчанию для колонки. Для ввода доступны значения, которые соответствуют выбранному типу данных, или SQL-выражение, результат которого сформирует соответствующее значение. Также это поле обязательно к заполнению при отсутствии «галочки» в параметре «Возможность значения NULL».

Примечание: Для типов данных текст, дата/время значение по умолчанию должно быть заключено в одинарные кавычки.

Справочники

Для более наглядного указания перечня используемых в колонке значений в ORBISmap 3 реализована возможность настройки справочников для отдельных полей.

Настройка справочников допустима для всех колонок, кроме типов «Геометрия», «JSON», «Заголовок» и «Файл».

Для указания справочника необходимо в окне редактирования соответствующей колонки нажать на кнопку . После этого отобразится окно, в котором возможно указать следующие параметры при помощи выпадающих списков:

  • Карта, в которой располагается таблица, содержащая колонку-справочник. В списке представлены только карты текущего проекта;
  • Таблица с колонкой-справочником;
  • Ключ – колонка, которая будет использована в качестве справочника;
  • Значение – опциональная колонка, значения которой будут отображаться при сопоставлении с колонкой-ключом;
  • Ограничение внешнего ключа – чек-бокс, гарантирующий соблюдение ограничений внешнего ключа.

Ограничения внешнего ключа подразумевают, что если настроена данная связь, то в соответствующую колонку таблицы будет невозможно добавить значения, которые не совпадают с перечнем значений из справочника, при изменении структуры таблицы с колонкой-справочником не получится удалить колонку, определенную как ключ в другой таблице, а также не получится удалить саму эту таблицу в целом.

Примечание: В качестве ключа возможно выбрать только колонки такого же типа, что и столбец, для которого настраивается справочник. При этом для настройки связи внешнего ключа колонка-ключ должна иметь отметку об уникальных значениях.

При указании справочника для уже существующей колонки, содержащей больше уникальных значений, чем содержится в справочнике, допустимо настроить только нестрогий справочник — без активации чек-бокса ограничений внешнего ключа.

Примечание: Таблица с колонкой-справочником может находиться как в одной карте вместе со слоем, для колонки которого указываются списковые значения, так и в другой карте этого же проекта. Колонки, подходящие для использования в качестве справочника, могут быть справочниками сразу для нескольких других колонок, которые могут находиться в разных слоях и разных картах.

Для колонок с настроенными справочниками сохраняется возможность форматирования как самих хранящихся в объектах значений, так и значений, выбранных для отображения при задании справочника.

При задании выражения форматирования для колонки со справочником разрашается использование следующих специальных значений:

  • $col — используется для обозначения непосредственно значения, хранящегося в текущей колонке;
  • <код_колонки> — определяет значение колонки с указанным кодом в этой же таблице;
  • $ref — используется для обращения к значению справочника, полученного по ключу, либо к самому ключу при отсутствии указания на значение.

Также допустимо использование справочников с несколькими вариантами значений. Для этого необходимо после настройки справочника активировать для колонки параметр «Массив значений».

Примечание: При настройке множественного справочника разрешается только нестрогое указание справочника, без ограничений для внешнего ключа, поскольку в данном случае не гарантируется полное соблюдение типов ключа справочника и самой колонки с учетом параметра «Массив значений».

Если при настройке множественного справочника указывается колонка со значениями для отображения, полученными по ключу, дополнительно в свойствах настраиваемой колонки требуется указать следующее выражение в поле «Формат»:

(SELECT table.column_value FROM map.table WHERE table.column_key = $col LIMIT 1)
Используемые в примере коды имеют следущие обозначения:

  • <table> — код таблицы-справочника;
  • <column_value> — код колонки со значением для отображения;
  • <map> — код карты, в которой расположена таблица-справочник;
  • <column_key> — код колонки из таблицы-справочника, определяемой как ключ;
  • $col — значение текущей колонки, для которой выполняется указание множественного справочника, допустимо прямое указание ее кода;
  • LIMIT 1 — служебное выражение, обеспечивающее корректную работу справочника.

Возможность значения NULL

Отсутствие отметки в чекбоксе этого параметра означает, что колонка должна всегда иметь некоторое значение.

В этом случае в окнах «Редактирование структуры», «Изменить объект» данная колонка будет отмечена звездочкой (*), что означает обязательность ее заполнения.

Примечание: Пустым значением считаются null и пустая строка. Колонки типов «Геометрия», «Заголовок» не могут быть обязательными к заполнению.
Примечание: Если в таблице уже имеются некоторые объекты, то при создании новой обязательной к заполнению колонки необходимо указать «Значение по умолчанию».

Колонки с уникальными значениями

При установлении отметки в соответствующем чекбоксе в создаваемой колонке будут содержаться только уникальные значения. При попытке ввода ранее использованного значения в колонку с параметром «Уникальные значения», будет отображено сообщение об ошибке.

Примечание: Параметр недоступен для колонок типа «Заголовок», «Геометрия» и «Файл».

Первичный ключ

При отсутствии идентифицирующей колонки id (создание таблицы без нее или же при удалении её из структуры) можно выбрать другую колонку первичным ключом, отметив соответствующий чекбокс. Также можно изменить идентифицирующую колонку, предварительно убрав свойство первичный ключ с другой колонки в структуре.

Примечание: Первичный ключ уникально идентифицирует строку в режиме отображения «Таблица». Для этого требуется, чтобы значения были одновременно уникальными и отличными от null.
Примечание: Параметр недоступен для колонок типа «Заголовок», «Геометрия» и «Файл».

Массив значений

Данный параметр позволяет указывать несколько значений колонки для одного объекта с возможностью независимого редактирования каждого элемента массива.

Чтобы внести элемент массива в соответствующую колонку необходимо в окне создания или редактирования объекта нажать на иконку и далее нажать на кнопку . Каждый элемент указывается в своем отдельном поле, для добавления следующего значения требуется снова нажать на соответствующую кнопку. Для удаления ненужного элемента следует нажать на значок .

После внесения нескольких элементов в режимах отображения данных «Таблица» и «Двойной вид» значения колонки-массива будут отображаться через специальный разделитель |.

Примечание: Параметр массива значений недоступен для колонок типа «Геометрия» и «Заголовок».

Автоинкремент

Установление данного параметра создает числовую последовательность, которая будет автоматически и последовательно увеличиваться при создании нового объекта.

Примечание: Автоинкремент доступен только для типа данных «Целое число».

Метаданные

Метаданные — дополнительные необязательные параметры колонки в формате JSON. Задаются для разработчиков.

Примечание: Работа с данным параметром осуществляется опытным пользователем или программистом.

Изменение порядка и вложенности

Для изменения порядка колонок в окне «Редактирование структуры», необходимо нажать по названию колонки и перетащить элемент на нужное место в структуре.

Для изменения вложенности колонок и создания древовидной структуры с колонкой типа «Заголовок» также необходимо нажать левой кнопкой мыши по названию нужного элемента и перетащить его под колонку-заголовок.

Примечание: Изменение вложенности доступно только при работе с колонками типа «Заголовок».

Удаление колонки

Для удаления колонки требуется навести указатель мыши на название колонки в окне «Редактирование структуры» и при нажатии правой кнопкой мыши выбрать пункт .