Раздел “Схема”¶
Раздел предназначен для просмотра и редактирования схемы данных.
Warning
Перед внесением каких-либо изменений в схему рекомендуется сделать резервную копию базы данных и убедиться, что пользователи в данный момент не работают с системой.
Раздел разделён на две части. В левой части расположено дерево схемы данных, в правой - область работы с объектами схемы.
В отдельных ветвях дерева содержатся Таблицы, Процедуры, Функции, Миграции и Библиотеки. Каждая из этих ветвей содержит объекты соответствующего типа, разделенные на группы.
Изначально объект не входит ни в одну группу и располагается в узле (без группы). После заполнения поля Группа он будет перемещён в узел с названием, указанным в поле.
Действия, доступные через контекстное меню (вызывается щелчком правой кнопкой мыши по элементу дерева):
Действие | Команда в контекстном меню | Узел |
---|---|---|
Добавить колонку в выделенную таблицу | Добавить физическую колонку | Колонки |
Добавить ссылочную колонку | Добавить комплексную колонку | Колонки |
Добавить первичный ключ | Добавить первичный ключ | Ограничения |
Добавить уникальный ключ | Добавить уникальный ключ | Ограничения |
Добавить индекс | Добавить индекс | Индексы |
Добавить таблицу | Добавить таблицу | Таблицы |
Добавить библиотеку | Добавить библиотеку | Библиотеки |
Добавить миграцию | Добавить миграцию | Миграции |
Добавить хранимую процедуру | Добавить процедуру | Процедуры |
Добавить функцию | Добавить функцию | Функции |
Удалить выделенный объект | Удалить | Созданный объект |
Note
При выборе пункта Добавить в контекстном меню нужной группы, объект будет создан с уже заполненным свойством Группа.
Над деревом схемы находится окно быстрого поиска, при помощи которого можно найти объект по его названию.
В верхней части разделов расположен тулбар с кнопками обновления, сохранения изменений в схеме, экспорта и импорта.
Импорт схемы данных/библиотеки из файла¶
Чтобы импортировать схему данных из файлов, необходимо выбрать Импорт -> Файл схемы… на тулбаре раздела.
Появится диалог выбора основного файла структуры БД формата tsd
. После выбора файла откроется окно с информацией по связанным со схемой библиотекам.
Нажав на x слева от названия библиотеки, её можно исключить из импортируемой схемы. Для подключения дополнительных библиотек нужно нажать на соответствующую кнопку и в файловой системе выбрать папки с файлами библиотек формата tsp
.
После нажатия на кнопку ОК система определит, изменяет ли импортируемая схема БД текущую, и при наличии изменений отобразит их список в соответствующем диалоге.
При нажатии Сохранить система начнёт применять изменения одно за другим. Применяемое изменение подсвечивается жёлтым цветом, успешно применённое изменение - зелёным.
Note
Если при обновлении произошла ошибка, то применение изменений останавливается, и ошибочный шаг подсвечивается красным. Двойной клик по этому шагу покажет диалог с детальным описанием ошибки.
Если к текущей схеме данных требуется импортировать библиотеки, следует воспользоваться кнопкой Импорт -> Файлы библиотек…. Появится диалог выбора папок. Необходимо выбрать папку, в которой есть файлы библиотек формата tsp
. После выбора нужных файлов система отобразит список изменений, которые будут внесены в схему данных. Чтобы подтвердить изменения, нужно нажать Сохранить.
Сохранение схемы данных¶
После внесения каких-либо изменений для сохранения схемы непосредственно в базу данных необходимо нажать на кнопку тулбара Сохранить всё.
В появившемся диалоговом окне будет отображен список изменений. Чтобы подтвердить изменения, нужно нажать Сохранить.
В случае, если изменений в схеме данных не будет найдено, в диалоговом окне будет выведено соответствующее сообщение.
Создание таблиц¶
Для создания таблицы необходимо нажать правой кнопкой мыши по узлу Таблицы и выбрать в контекстном меню пункт Добавить таблицу.
По умолчанию таблица создаётся с именем Table
в узле (без группы). Название таблицы и её группу можно изменить, выбрав таблицу и указав в правой части свойства Название и Группа соответственно.
Также для таблицы можно указать следующие свойства:
- Название – используется при создании карточек и представлений, поэтому его изменение нежелательно.
- Группа – для удобства работы со схемой данных.
- Описание – описание предназначения таблицы.
-
Библиотека - библиотека, в которой будет храниться данная таблица, по умолчанию -
Default
.Important
Для упрощения процесса обновления на новые версии платформы крайне желательно все объекты схемы данных (такие как таблицы, колонки и т.п.), добавляемые и изменяемые в рамках проектного решения, сохранять в отдельной библиотеке. Подробнее библиотеки рассмотрены в разделе Создание библиотек.
-
Используется для типа - тип объекта, с которым ассоциированы данные в создаваемой таблице. Указывается в зависимости от типа объектов системы, для которых предназначена таблица:
Не указан
– тип не определёнКарточки
Задания
Файлы
-
Тип секции – тип данных, хранимых в таблице:
Перечисление
- используется для указания значений вручную в узле Записи. Подробнее о создании данных таблиц можно узнать в Руководстве начинающего разработчика.Строковая
– одиночные записи. На один объект (карточка, задание и т.п.) одна запись в таблице.Коллекционная
– коллекционные записи. На один объект может приходиться несколько записей в таблице.Иерархическая
– иерархические записи. Тоже самое, что и коллекционные, но с поддержкой иерархии записей.
-
Виртуальная – таблица описана в схеме данных, но физически отсутствует в базе данных.
Добавить в таблицу необходимые колонки, ключи и индексы можно, нажав правой кнопкой мыши на нужном узле таблицы и выбрав требуемый пункт в контекстном меню.
После того, как настройка таблицы будет завершена, необходимо её сохранить. Для вызова диалога сохранения схемы можно нажать Ctrl+S.
Создание колонок¶
Колонки используются для задания значений атрибутов схемы и представлены в таблицах как столбцы. Создать колонку можно двух типов: физическую и комплексную.
Физическая колонка хранит значения, такие как номера или строки, в то время как комплексная колонка ссылается на значения и колонки других таблиц, может содержать произвольный тип и необходима для поддержания ссылочной целостности базы данных.
При создании физических и комплексных колонок следует внимательно следить за типом значений, которые будут храниться в них. Так, тип целочисленных значений Int16
, в отличие от Int32
, требует меньше памяти для хранения, однако в нем нельзя хранить слишком большие числа.
Добавление колонки осуществляется при помощи контекстного меню:
Таблица с доступными типами данных для колонок схемы¶
Название | Описание и параметр (в скобках) | Типы в SQL и .NET | Тип в карточках | Контролы в карточках |
---|---|---|---|---|
AnsiString | Строка, закодированная в текущей кодовой странице для базы данных MSSQL, для PostgreSQL используется кодировка UTF-8 аналогично типу String . (Max) - строка неограниченной длины (до 2 Гб текста) |
MSSQL: PostgreSQL: .NET: |
string |
Нумератор Строка Текст Текст с форматированием |
String | Строка, закодированная в UTF-8. В контролах можно использовать символы Unicode: иероглифы, иностранные буквы, финансовые и математические обозначения и т.д. (Max) - строка неограниченной длины (до 2 Гб текста) |
MSSQL: PostgreSQL: .NET: |
string |
Нумератор Строка Текст Текст с форматированием |
Int16 | Целочисленный тип данных. Размер - 16 бит. Этого достаточно для хранения значений не больше 32 767 | MSSQL: PostgreSQL: .NET: |
int |
Выбор цвета Строка Целое число |
Int32 | Целочисленный тип данных. Размер - 32 бита. Этого достаточно для хранения значений не больше 2 147 483 647 | MSSQL: PostgreSQL: .NET: |
int |
Выбор цвета Нумератор Строка Целое число |
Int64 | Целочисленный тип данных. Размер - 64 бита. Подходит для хранения значений, которые выходят за диапазоны типов int16 и int32 |
MSSQL: PostgreSQL: .NET: |
int |
Нумератор Строка Целое число |
Double | Вещественный тип данных, число с плавающей запятой размером 8 байт | MSSQL: PostgreSQL: .NET: |
double |
Вещественное число Строка |
Currency | 64-битные целые числа, масштабированные в 10 000 раз для представления числа с фиксированным десятичным разделителем (15 цифр слева от него и 4 цифры справа) | MSSQL: PostgreSQL: .NET: |
decimal |
Десятичное число Строка |
Decimal | Содержит 128-разрядные (16-байтные) значения со знаком, представляющие 12-байтные целые числа с переменной степенью, кратной 10. Коэффициент масштабирования определяет количество цифр справа от десятичной запятой. Он находится в диапазоне от 0 до 28. (0..29, 0..28 ) - первое число означает число знаков до запятой, второе - после. Сумма значений в скобках не должна превышать 29 |
MSSQL: PostgreSQL: .NET: |
decimal |
Десятичное число Строка |
Time | Формат времени без даты, занимает от 3 до 5 байт памяти, точность определяется пользователем | MSSQL: PostgreSQL: .NET: |
time |
Дата и время Строка |
Date | Формат даты без времени, занимает 3 байта и предназначен для хранения даты диапазоном от 01.01.0001 до 31.12.9999 |
MSSQL: PostgreSQL: .NET: |
date |
Дата и время Строка |
Datetime | Стандартный тип данных для хранения даты и времени. Занимает в памяти 8 бит: 4 для хранения даты и 4 - для хранения времени | MSSQL: PostgreSQL: .NET: |
datetime |
Дата и время Строка |
Datetime 2 | Формат времени-даты, представленный SQL Server 2008. В отличие от datetime , часть с датой представляют три последних бита |
MSSQL: PostgreSQL: .NET: |
datetime |
Дата и время Строка |
DatetimeOffset | Тип данных, который, помимо даты и времени, хранит также информацию о смещении, по которому было установлено текущее время | MSSQL: PostgreSQL: .NET: |
datetimeoffset |
Дата и время Строка |
Boolean | Логический тип данных | MSSQL: boolean .NET: bool |
bool |
Флажок Строка |
Binary | Бинарные данные. (Max) - строка неограниченной длины. Вместо Max можно указать максимальную длину строки от 1 до 8000 |
MSSQL: PostgreSQL: .NET: |
binary |
Строка |
Guid | Тип, предназначенный для хранения уникальных идентификаторов UUID/Guid |
MSSQL: PostgreSQL: .NET: |
guid |
Строка |
Xml | Содержит код в xml-разметке | MSSQL: PostgreSQL: .NET: |
xml |
Нумератор Строка Текст Текст с форматированием |
Json | Содержит точную копию введённых JSON-данных с сохранением форматирования | MSSQL: PostgreSQL: .NET: |
json |
Нумератор Строка Текст Текст с форматированием |
BinaryJson | Содержит JSON-данные, хранящиеся в бинарном виде, без сохранения форматирования. Поддерживает индексацию | MSSQL: PostgreSQL: .NET: |
binaryjson |
Нумератор Строка Текст Текст с форматированием |
Reference | Тип, доcтупный только комплексным колонкам | Сохраняются типы колонок таблицы, на которую ссылается | reference |
Ссылка |
При использовании типов данных следует учесть следующие моменты:
- Типы
Byte
иSByte
не должны использоваться, потому что в PostgreSQL есть двухбайтовый аналогint2
, и их использование в рамках одного пула данных приведёт к разному поведению при загрузке типов из базы в серверном коде (тип данныхshort
илиbyte
). - Беззнаковые типы
UInt16
,UInt32
иUInt64
не должны использоваться, поскольку в PostgreSQL вместо них имеются знаковые. - Тип
Single
не используется, поскольку это число с плавающей запятой и низкой точностью, что приводит к потерям точности при операциях со значением, при этом размер поля в байтах незначительно ниже, чемDouble
. - Вместо
Double
используетсяDecimal
для хранения денежных сумм, поскольку эти типы не имеют потерь точности при операциях. Например, типDecimal(18,2)
является достаточным для надёжного хранения любых сумм в большинстве случаев. - Тип данных
Currency
соответствует типуmoney
в MSSQL и в PostgreSQL, причём для каждой СУБД максимальные значения и точность отличаются. Чтобы однозначно указать эти параметры, используетсяDecimal
.
Пример создания таблицы для хранения значений перечисления¶
Данная таблица нужна для хранения списка записей, из которых потом в поле карточки пользователь сможет выбрать какую-либо одну.
Шаг 1: Создание таблицы со свойствами Используется для типа - Не указан
и Тип секции - Перечисление
.
Шаг 2: Добавление в таблицу колонки с первичным ключом, колонки с названием элементов перечисления и других необходимых полей.
Шаг 3: Добавление в таблицу первичного ключа (в данном примере ключевое поле – JustID
).
Чтобы задать ключевое поле, в разделе Индексируемые колонки из выпадающего списка нужно выбрать требуемое поле и далее нажать на кнопку +.
Шаг 4: Сохранение созданной таблицы с помощью сочетания клавиш Ctrl+S.
Шаг 5: Заполнение значений перечисления в разделе Записи.
Чтобы добавить запись, нужно нажать на кнопку Добавить строку, заполнить пустое поле (необходимо выделить поле левой кнопкой мыши и ввести значение) и нажать Enter.
Чтобы удалить запись, нужно выделить строку (щелчком левой кнопки мыши по полю записи) и нажать Delete.
Шаг 6: Сохранение добавленных записей с помощью сочетания клавиш Ctrl+S.
Пример создания поля со ссылкой на поле другой таблицы¶
Данный тип поля позволит хранить в таблице ссылку на другую таблицу (справочник, перечисление, список объектов, и др.).
Колонка таблицы для значений, которые будут хранить такие ссылки, должна быть комплексной. После добавления комплексной колонки нужно задать её Тип - Reference (Typified)
.
В выпадающем списке Ссылка на таблицу можно выбрать, куда будут ссылаться поля колонки.
После внесения изменений их необходимо сохранить с помощью сочетания клавиш Ctrl+S.
Пример создания автоинкрементной колонки¶
Данная настройка позволяет создавать автоинкрементные колонки, значения для которых определяются СУБД автоматически. Для этого в свойствах физической колонки нужно отметить флаг Автоинкрементная колонка, задать целочисленный Not Null
Тип и выбрать Начальное значение и Шаг, с которым выделяются следующие значения. Если в настройках колонки эти значения не заданы, то используются значения по умолчанию (1 для начального значения и 1 для шага). Отрицательные значения шага позволяют сделать убывающий список.
Для создания автоинкрементной колонки для таблицы должны быть выполнены следующие условия:
- У колонки не должно быть задано значение по умолчанию.
- Таблица не должна иметь записей в схеме данных.
Important
Для СУБД MSSQL для одной таблицы может быть создана только одна автоинкрементная колонка.
При указании настройки Автоинкрементная колонка или изменении ее настроек для созданной колонки с таблицей, в которой есть данные, следует учитывать, что поведение будет различно для разных СУБД:
- MSSQL: все данные колонки затрутся и заполнятся новыми, в соответствии с настройками автоинкремента.
- PostgreSQL: данные колонки сохранятся, однако взятие следующего значения будет производиться с начала (начальное значение).
Important
В случае, если данная колонка использовалась как первичный ключ или по ней настроен уникальный индекс, изменение/установка автоинкремента для колонки может привести к ошибкам при добавлении значений в данную строку.
Процедуры¶
Хранимые процедуры, которые могут быть заданы в схеме для последующего использования. По сути, это обычные хранимые процедуры в БД со всеми вытекающими отличиями от функций.
Редактор хранимых процедур имеет следующие настройки:
- Название - название процедуры. Должно быть уникальным и совпадать с названием, указанным в запросе. При изменении названия в запросе, значение этого поля автоматически изменится.
- Группа – нужна для удобства работы со схемой данных (процедура будет отображаться в другой группе сразу после изменения поля).
- Описание – описание предназначения процедуры.
- Библиотека - библиотека, в которой будет храниться данная процедура, по умолчанию -
Default
. - Выполнять до модификации таблиц - по умолчанию запросы на создание процедур выполняются после импорта таблиц, если нужно выполнить запрос для конкретной процедуры до импорта таблиц, необходимо установить данный флаг.
- Порядок выполнения - число, которое является сквозным для процедур, функций и миграций. Если для прочих объектов установлен порядок
0
, то создание процедуры с порядком-1
будет выполняться перед ними, но после импорта таблиц (если не установлен соответствующий флаг). Если порядок равен1
, создание процедуры произойдёт гарантированно после объектов с более низким порядком. Создание процедур с одинаковым порядком выполняется в неопределённом порядке. - СУБД - селектор, который определяет редактор запроса для какой СУБД отображается в данный момент.
- Редактор запроса - позволяет описать запрос для создания процедуры на MSSQL или PostgreSQL, в зависимости от того, какая СУБД выбрана в селекторе СУБД в данный момент.
Функции¶
SQL-функции, которые могут быть заданы в схеме для последующего использования в решении.
Функции так же, как и хранимые процедуры, имеют абсолютно аналогичные настройки в схеме.
- Название - название функции. Должно быть уникальным и совпадать с названием, указанным в запросе. При изменении названия в запросе, значение этого поля автоматически изменится.
- Группа – нужна для удобства работы со схемой данных (функция будет отображаться в другой группе сразу после изменения поля).
- Описание – описание предназначения функции.
- Библиотека - библиотека, в которой будет храниться данная функция, по умолчанию -
Default
. - Выполнять до модификации таблиц - по умолчанию запросы на создание функций выполняются после импорта таблиц, если нужно выполнить запрос для конкретной функции до импорта таблиц, необходимо установить данный флаг.
- Порядок выполнения - число, которое является сквозным для процедур, функций и миграций. Если для прочих объектов установлен порядок
0
, то функция с порядком-1
будет выполняться перед ними, но после импорта таблиц (если не установлен соответствующий флаг). Если порядок равен1
, создание функции произойдёт гарантированно после объектов с более низким порядком. Создание функций с одинаковым порядком выполняется в неопределённом порядке. - СУБД - селектор, который определяет редактор запроса для какой СУБД отображается в данный момент.
- Редактор запроса - позволяет описать запрос для создания функции на MSSQL или Postgres, в зависимости от того, какая СУБД выбрана в селекторе СУБД в данный момент.
Миграции¶
Миграции это SQL-скрипты, которые выполняются при импорте схемы один раз, а также повторно при каждом импорте, при котором SQL-текст миграции как-либо менялся.
Миграции имеют схожие настройки с процедурами, но с некоторыми отличиями:
- Название – название миграции. Никак не фигурирует в теле запроса, в отличие от процедур и функций.
- Группа – группа нужна для удобства работы со схемой данных (миграция будет отображаться в другой группе сразу после изменения поля).
- Описание – описание предназначения миграции.
- Библиотека – библиотека, в которой будет храниться данная миграция, по умолчанию -
Default
. - Выполнять без транзакции – по умолчанию выполнение SQL миграции происходит внутри транзакции. Для создания типов и прочих изменений, связанных с изменением структуры данных в БД, транзакцию необходимо выключить этим флагом.
- Выполнять до модификации таблиц – по умолчанию миграции выполняются после импорта таблиц, если нужно выполнить миграцию до импорта таблиц, необходимо установить данный флаг.
- Порядок выполнения – число, которое является сквозным для процедур, функций и миграций. Если для прочих объектов установлен порядок
0
, то миграция с порядком-1
будет выполняться перед ними, но после импорта таблиц (если не установлен соответствующий флаг). Если установить порядок1
, то выполнение миграции произойдёт гарантированно после объектов с более низким порядком. Если оставить порядок0
, то миграция будет выполняться после импорта процедур и функций с порядком0
. Миграции с одинаковым порядком выполняются в неопределённом порядке. - СУБД – селектор, который определяет редактор запроса для какой СУБД отображается в данный момент.
- Редактор запроса – позволяет описать запрос миграции на MSSQL или PostgreSQL, в зависимости от того, какая СУБД выбрана в селекторе СУБД в данный момент.
Создание библиотек¶
Библиотеки могут использоваться для разработки изолированных решений и далее подключаться к основной схеме данных.
Important
Для упрощения процесса обновления на новые версии платформы крайне желательно все объекты схемы данных (такие как таблицы, колонки и т.п.), добавляемые и изменяемые в рамках проектного решения, сохранять в отдельной библиотеке.
Библиотека хранится отдельно от основной схемы и описывает:
- Новые таблицы (с колонками, ключами, индексами и записями)
- Новые колонки в таблицах основной схемы
- Новые индексы в таблицах основной схемы
- Новые ограничения (constraints) в таблицах основной схемы
- Новые предопределенные строки в таблицах-перечислениях основной схемы
- Новые миграции
- Новые функции
- Новые процедуры
Создать новую библиотеку можно с помощью контекстного меню узла Библиотеки.
Для новой библиотеки указывается уникальное название и, при необходимости, описание.
После создания библиотеки объекты схемы можно перенести в неё: таблицы, колонки, записи, функции и т.д.:
После внесения изменений схему данных необходимо сохранить.
Tip
Все объекты, добавляемые и изменяемые в библиотеке, сохраняются в папку с именем, соответствующим имени библиотеки. Это позволяет изолированно обновлять или переносить библиотеку между разными версиями платформы и проектными решениями.
Посмотреть все объекты схемы, относящиеся к какой-либо библиотеке можно с помощью специального фильтра, расположенного в верхней части окна. После выбора в выпадающем списке библиотеки в дереве будут отображены только те объекты, которые относятся к данной библиотеке.