Язык запросов DaJet основан на системе типов 1С:Предприятие 8. Кроме простых типов данных DaJet так же поддерживает такие специфичные для этой платформы типы, как Ссылка (Entity) и СоставнойТип (Union).
1С | DaJet | C# | MS SQL Server | PostgreSQL |
Неопределено | null | null | NULL | NULL |
Булево | boolean | bool | binary(1) | boolean |
Число | number | decimal | numeric | numeric |
Дата | datetime | DateTime | datetime2 | timestamp without time zone |
Строка | string | string | nvarchar | mvarchar |
Ссылка | entity | Entity | binary(16) | bytea |
Составной тип | oneof | Union | Все выше перечисленные | Все выше перечисленные |
Уникальный идентификатор | uuid | Guid | binary(16) | bytea |
Бинарные данные | binary | byte[] | varbinary(max) | bytea |
Entity - это структура данных, которая состоит из одного или двух полей. Данная структура является своеобразным указателем (ссылкой) на объект в базе данных.
Структура Entity может иметь пустое значение, то есть не указывать на какой-то конкретный объект базы данных. В таком случае значением этой структуры будет нулевой UUID.
1С | DaJet | C# | MS SQL Server | PostgreSQL | Поле СУБД |
Код типа type code |
number | int | binary(4) | bytea | 1. _Fld123_TRef 2. Не используется |
Ссылка reference |
uuid | Guid | binary(16) | bytea | 1. _Fld123_RRef 2. _Fld123RRef |
Как видно из таблицы выше, в базе данных 1С:Предприятие 8 структура "Ссылка" - это комбинация полей, имеющих постфиксы TRef (код типа) и RRef (идентификатор объекта).
При этом в некоторых случаях постфикс TRef в целях оптимизации на уровне СУБД может отсутствовать ("Поле СУБД", вариант № 2).
Язык запросов DaJet все эти случаи учитывает и делает работу с этим типом данных прозрачной.
Union - это структура данных, которая может состоять из нескольких полей на уровне базы данных. По сути своей, тип Union является реализацией классического типа данных tagged union или, другая аналогия, типа данных sql_variant MS SQL Server.
Одно поле структуры - дискриминатор (tag), который указывает на конкретный тип данных значения, хранимого структурой в данный момент (текущее значение). Остальные поля используются для хранения значений конкретного типа, определённого дискриминатором. Некоторые поля, в целях оптимизации на уровне СУБД, а также в зависимости от настроек конфигурации 1С:Предлприятие 8, могут отсутствовать. Кроме этого, структура Union, так же как и Entity, может иметь пустое значение (NULL).
1С | DaJet | C# | MS SQL Server | PostgreSQL | Поле СУБД (постфикс) |
Дискриминатор | number | byte | binary(1) | bytea | _TYPE |
Булево | boolean | bool | binary(1) | boolean | _L |
Число | number | decimal | numeric | numeric | _N |
Дата | datetime | DateTime | datetime2 | timestamp without time zone | _T |
Строка | string | string | nvarchar | mvarchar | _S |
Код типа | number | int | binary(4) | bytea | _RTRef |
Ссылка | uuid | Guid | binary(16) | bytea | _RRRef |
Анатомия метаданных 1С:Предприятие 8
Размещение данных 1С:Предприятия 8
Размещение данных 1С:Предприятия 8 (таблицы и поля)
Особенности хранения составных типов данных 1С:Предприятия 8