При создании таблицы или добавлении столбца в таблицу базы данных вы указываете определенный тип данных для столбца. Типы данных определяются, исходя из следующего:
- Какие значения можно хранить в столбце
- Какие операции можно применять к данным этого столбца
- Как данные этого столбца хранятся в базе данных
ArcGIS работает с определенными типами данных. При осуществлении доступа к таблице базы данных через Подключения к базам данных или слой запроса, ArcGIS отфильтровывает любые неподдерживаемые типы данных. ArcGIS не будет отображать неподдерживаемые типы данных, и вы не сможете редактировать их в ArcGIS. Аналогично, если при помощи ArcGIS копировать и вставлять таблицы, содержащие неподдерживаемые типы данных, из одной базы в другую, ArcGIS вставит только те столбцы, которые используют поддерживаемые типы данных.
В первом столбце в следующей таблице перечислены типы данных ArcGIS. Во втором столбце перечислены Oracle типы данных, создаваемые ArcGIS. В третьем столбце показано, какие другие Oracle типы данных (если имеются) сопоставляются типам данных ArcGIS при просмотре таблицы, созданной вне ArcGIS. В последнем столбце при необходимости предоставляется дополнительная информация.
Типы данных ArcGIS | Создаваемые типы данных Oracle | Другие типы данных Oracle, которые можно просматривать | Примечания |
---|---|---|---|
BLOB | BLOB | ||
DATE | TIMESTAMP | DATE | |
DOUBLE | NUMBER(38,8) | NUMBER(p,s) | Точность и количество знаков, указанные в ArcGIS, могут повлиять на тип полученных данных, создаваемых в базе данных. Более подробно см. Типы данных полей ArcGIS. |
FLOAT | NUMBER(38,8) | NUMBER(p,s) | Точность и количество знаков, указанные в ArcGIS, могут повлиять на тип полученных данных, создаваемых в базе данных. Более подробно см. Типы данных полей ArcGIS. |
GEOMETRY | ST_GEOMETRY, NUMBER(38), or SDO_GEOMETRY | Тип создаваемых данных Oracle зависит от указанного при создании класса пространственных объектов хранилища геометрии. Compressed binary или well-known binary (только для баз геоданных) = NUMBER(38); Oracle Spatial = SDO_GEOMETRY; spatial type = ST_GEOMETRY. Чтобы использовать ST_Geometry в базе данных (не в базе геоданных), вам нужно установить эту библиотеку. | |
GLOBAL ID | CHAR or NCHAR (UUID LEN) | Поддерживается только базами геоданных. Поле уникального идентификатора будет создано как NCHAR, если для параметра UNICODE_STRING ключевого слова конфигурации, с которым была создана таблица, было указано значение TRUE. | |
GUID | CHAR or NCHAR (UUID LEN) | Поле уникального идентификатора будет создано как NCHAR в базе геоданных, если для параметра UNICODE_STRING ключевого слова конфигурации, с которым была создана таблица, было указано значение TRUE. | |
LONG INTEGER | NUMBER(38) | NUMBER(n) | n может принимать значения из диапазона от 5 до 10. При создании с помощью ArcGIS Desktop или ArcObjects и при значении точности, равном 0, в базе данных создается NUMBER(38); в ином случае используется заданная точность. |
OBJECT ID | NUMBER(38) при создании в многопользовательской базе геоданных NUMBER(38) с последовательностью и триггером при создании со следующими условиями:
NUMBER(38) всегда создается в качестве идентификатора при использовании ArcGIS для создания класса пространственных объектов или таблицы в базе данных Oracle 12c либо при работе с инструментом геообработки Добавить прирастающее поле ID для добавления поля ID field к таблице базы данных Oracle 12c. | В ArcGIS тип ObjectID соответствует столбцу с идентификаторами записей (ID) таблицы (или класса объектов). В таблице может быть только один. | |
RASTER | RASTERBLOB, BLOB, or ST_RASTER | Растры поддерживаются только базами геоданных. Используемый тип данных для поля растра зависит от ключевого слова конфигурации, указанного при создании набора данных мозаики или набора растровых данных. | |
SHORT INTEGER | NUMBER(5) | NUMBER(n) | n может принимать значения из диапазона от 1 до 5. Но в столбцах short integer могут храниться только значения в диапазоне от -32 768 до 32 767. Даже если точность числа равна 5, вы не можете хранить в столбце short integer значение, большее 32 767 или меньшее -32 768. При создании с помощью ArcGIS Desktop n = 5. Это позволит вам сохранять значения short integer, попадающие в допустимый интервал. |
TEXT | VARCHAR2, CLOB, NVARCHAR2 или NCLOB |
Текстовые типы данных
Если вы собираетесь включить текстовое поле в таблицу, создаваемую с помощью ArcGIS, используется тип данных VARCHAR2, если в базе данных не выбрана кодировка Unicode. Если установлен размер текстового поля, больший 4000, а для базы данных не выбрана кодировка Unicode, тип данных Oracle будет CLOB.
Если для вашей базы данных выбрана кодировка Unicode, будет создано текстовое поле NVARCHAR2. (Это настройка, используемая по умолчанию для баз геоданных в Oracle.) Если установлен размер текстового поля, больший 2 000, а для базы данных выбрана кодировка Unicode, тип данных Oracle будет NCLOB.
Геометрические типы данных
Как указано в таблице, ArcGIS создает и может работать в Oracle с тремя типами геометрических данных: Esri ST_Geometry, Oracle SDO_Geometry и Сжатый бинарный. Хранение геометрии Compressed binary может использоваться только в базах геоданных.
ST_Geometry
Ниже приводится общее описание пространственного типа данных ST_Geometry. Сведения о реализации в Oracle см. в разделе ST_Geometry в Oracle.
Тип данных ST_Geometry использует спецификацию пользовательских типов данных SQL 3 (UDT), что позволяет создавать столбцы, в которых могут храниться пространственные данные, например, улицы, земельные участки, достопримечательности. В соответствии со стандартами International Organization for Standards (ISO) и Open Geospatial Consortium, Inc., (OGC) он обеспечивает поддержку SQL-доступа к базам геоданных и базам данных Данный вид хранения расширяет возможности базы данных, обеспечивая хранение для объектов (точек, линий и полигонов), которые представляют графические объекты. Оно было разработано для эффективного использования ресурсов баз данных, для совместимости с объектами баз данных, такими, как реплики и разделы, и для предоставления быстрого доступа к пространственным данным.
Хотя вы можете определить столбец в виде типа ST_Geometry, вы не добавляете значения ST_Geometry в этот столбец, поскольку он не может быть вызван. Вместо этого вы добавляете значения подкласса.
ST_Geometry является абстрактным невызываемым суперклассом. Однако его подклассы могут быть вызваны (инициализированы). Вызванный тип данных – это тип данных, который может быть определен как столбец таблицы; в него могут быть добавлены значения этого типа.
Следующая схема демонстрирует иерархию типа данных ST_Geometry и его подклассов.
Подклассы ST_Geometry разделены на две категории: подклассы основной геометрии и подклассы однородных наборов. Основная геометрия включает: ST_Point, ST_LineString и ST_Polygon, а однородные наборы включают ST_MultiPoint, ST_MultiLineString и ST_MultiPolygon. Как ясно из названий, наборы однородных элементов являются наборами базовых геометрий. Помимо добавлений одинаковых свойств с базовой геометрией, однородные наборы имеют некоторые собственные свойства.
Каждый подкласс хранит тип геометрии, отображенный в его имени; например, ST_MultiPoint хранит мультиточки. Список подклассов и их описание приведены в следующей таблице:
Подтип | Описание |
---|---|
ST_Point |
|
ST_LineString |
|
ST_Polygon |
|
ST_MultiPoint |
|
ST_MultiLineString |
|
ST_MultiPolygon |
|
SDO_Geometry
SDO_Geometry реализован с помощью системы расширяемых типов реляционных объектов Oracle. Тип SDO_Geometry предлагается компанией Oracle с двумя основными опциями:
- Oracle Spatial – это дополнительный компонент Oracle Database Enterprise Edition. Кроме предоставления типа SDO_Geometry, Oracle Spatial предоставляет ряд дополнительных геопространственных возможностей.
- Oracle Locator поддерживает поднабор возможностей Oracle Spatial. Он включается как стандартный компонент Oracle Database в версиях Standard и Enterprise. Помимо прочих возможностей, в нем содержится тип геометрии Oracle Spatial (который называется SDO_Geometry) и интерфейс SQL API, предназначенный для этого содержимого.
ArcGIS поддерживает SDO_Geometry в качестве дополнительного метода хранения пространственных данных. В частности геометрия Oracle Spatial или Locator может использоваться для хранения и управления объектами и содержанием растровых наборов данных в многопользовательских базах геоданных или базах данных Oracle.
SDO_Geometry сохраняет сведения о геометрии, включая тип геометрии, ID пространственной привязки, тип интерполяции (прямая или с изгибами) и значений координат. SDO_Geometry в базах геоданных ArcSDE поддерживает отдельные и множественные точки, линии и геометрию площади. Геометрии можно описать как наличие линейной интерполяции между координатами по определению, данному в спецификации OpenGIS Simple Feature Specification. Геометрия также может строиться по круговым кривым или с комбинацией обоих методов интерполяции. Программные приложения отвечают за правильную вставку, обновление и вызов содержимого типа SDO_Geometry, используя объектно-реляционный интерфейс SQL Oracle. Приложения также отвечают за то, чтобы содержимое каждой геометрии соответствовало правилам, определенным в документации по Oracle Spatial. Oracle предоставляет процедуры регулярной проверки геометрии, которые могут выполняться после добавления геометрии. Кроме того, начиная с Oracle версии 11.1.0.7, геометрия проверяется при добавлении индекса.
Информация о каждом столбце SDO_Geometry должна быть записана в схеме метаданных Oracle Spatial несмотря на то, что Oracle Spatial не делает этого автоматически. (Схема метаданных Oracle Spatial предоставляется в каждой схеме в представлении USER_SDO_GEOM_METADATA.) Программное обеспечение, которое создает столбцы SDO_Geometry, должно добавлять в них метаданные. ArcGIS делает это для любых создаваемых классов объектов SDO_Geometry. Метаданные содержат имя пространственного столбца, имя таблицы, в котором он находится, а также идентификатор Oracle Spatial Reference Identifier (SRID), число размеров, диапазон каждого размера и соответствующий координатный допуск.
Пространственные индексы предоставляют быстрый доступ к объектам на основе местоположения их геометрии. Для SDO_Geometry, пространственные индексы R-tree часто являются самым эффективными и простыми в создании, поэтому в большинстве случаев компания Oracle рекомендует пользоваться именно этими индексами. Oracle Spatial предоставляет средство Spatial Index Advisor, которое позволяет определить лучший тип пространственного индекса для данной таблицы. Кроме того, обратитесь к руководству пользователя и справке по Oracle Spatial для получения подробных сведений о поддерживаемых типах пространственных индексов, способов их создания и преимуществах различных методов пространственной индексации.
Oracle Spatial расширяет возможности SQL благодаря функциям пространственного поиска для первичной и вторичной фильтрации. Включение функции SDO_FILTER в SQL-запрос приводит к первичному пространственному поиску с использованием пространственного индекса. Пространственные предикаты, такие как SDO_RELATE и SDO_CONTAINS, возвращают вторичные отношения между парами объектов SDO_GEOMETRY. Oracle Spatial предоставляет функции пространственного преобразования, которые меняют форму для значения SDO_Geometry. Например, функция SDO_BUFFER вычисляет координаты нового объекта SDO_Geometry в виде буферного полигона на определенном расстоянии вокруг исходной геометрии. Другие функции пространственного преобразования включают SDO_DIFFERENCE и SDO_INTERSECTION.
Oracle Spatial предоставляет доступ к ряду предварительно определенных базовых систем координат с использованием значения SRID. Значение SRID, хранящееся в объекте SDO_Geometry, определяет привязку координат для геометрии, хранящейся в этом объекте. Если значение не NULL, идентификатор SRID объекта SDO_Geometry является внешним ключом для таблицы, содержащей сведения о каждом идентификаторе SRID. Это таблица MDSYS.CS_SRS. Функция SDO_TRANSFORM использует идентификатор пространственной привязки для организации преобразования базовых координат. ArcGIS также использует эту информацию для создания пространственных привязок.
Сжатый бинарный формат
Тип Esri compressed binary использует механизм бинарного хранения для хранения геометрии пространственных объектов. Сжатый бинарный класс пространственных объектов состоит из трех таблиц: бизнес-таблицы, таблицы объектов и таблицы пространственного индекса.
После проверки геометрии клиентское приложение сжимает и отсылает ее в базу геоданных, где она хранится в сжатом бинарном формате в таблице пространственных объектов, или F-таблице. Сжатие геометрии клиентским приложением снимает эту задачу с сервера базы данных и сокращает время на пересылку этой геометрии. Оно также обеспечивает эффективное хранение и извлечение пространственных данных, экономя пространство, необходимое для хранения данных, на целых 40 процентов.
В бизнес-таблице находятся атрибуты и пространственный столбец. Пространственный столбец является ключом к таблице объектов и таблице пространственного индекса.
Отношения между бизнес-таблицей и таблицей объектов управляются через пространственный столбец и столбец ID объектов (FID). Данный ключ, который поддерживается ArcGIS, является уникальным.
Растровые типы данных
Вы можете использовать BLOB или ST_Raster для столбцов наборов растровых данных и наборов данных мозаики.
Наборы растровых данных и наборы данных мозаики, созданные с ключевым словом конфигурации, которое содержит параметр RASTERCOLUMN со значением RASTERBLOB или BLOB, всегда содержат столбцы BLOB. Когда используется RASTERBLOB, столбец BLOB создается непосредственно в бизнес-таблицу; когда используется BLOB, столбец BLOB создается во вспомогательной таблице. Сведения о BLOB в Oracle см. в разделе BLOB этой главы.
В следующем подразделе описывается типы данных ST_Raster.
ST_Raster
ST_Raster – это определяемый пользователем тип данных, который можно установить в многопользовательских базах геоданных, чтобы обеспечить SQL-доступ к растровым данным.
Чтобы использовать ST_Raster, его необходимо настроить в базе геоданных.
Подробные сведения об определении объекта типа ST_Raster см. в разделе Тип данных ST_Raster.
BLOB
BLOB – используемое в СУБД сокращение, обозначающее большие бинарные объекты. Столбцы BLOB были введены несколько лет назад корпорацией Oracle для замены технологии LONG RAW для хранения бинарных данных.
Архитектура типа данных BLOB делится на три базовых компонента: столбец BLOB, сегмент LOB и индекс LOB. В столбце BLOB хранится локатор LOB локатор (36 байт) и бинарные данные в строке, если длина строки составляет менее 3965 байт, и если для столбца не отключено хранение в строках.
Если размер бинарных данных превышает 3964 байт, место для хранения в строках в столбце BLOB не выделяется, и локатор LOB ссылается на бинарные данные, хранящиеся в сегменте LOB.
В связи с этим размер значения в столбце BLOB с включенным хранением в строках всегда составляет не менее 36 байт (место, выделенное на локатор LOB) и может составлять до 4000 байт (сумма места, выделенного на локатор LOB, и максимального места, которое может быть выделено на бинарные данные, хранящиеся в строке).
Сегмент LOB делится на блоки. Размер блока должен быть кратным размеру блока данных Oracle. Например, если размер блока данных составляет 8КБ, сегмент LOB можно создавать с размером блока не менее 8 КБ. Если длина данных в сегменте LOB составляет 5000 байт, они сохраняются в сегменте LOB, поскольку их длина превышает 3964 байт, а размер блока составляет 8 КБ или 8192 байт. В данном случае неиспользованными остаются 3192 байт блока из сегмента LOB. При преобразовании данных из LONG RAW в BLOB может потребоваться больше места в связи с наличием неиспользуемого места в сегменте LOB. Это увеличение может составить до 30 процентов. Этого нельзя избежать, если размер данных превышает 3964 байт, т.е. пороговое ограничение столбца BLOB для хранения внутри строк.
Размер блока 8 КБ обеспечивает наилучшую производительность ввода/вывода при минимальных затратах места. При использовании размера блока 16 КБ затраты места будут больше, чем для блока 8 КБ. В связи с этим, чтобы избежать потери места, рекомендуется перестроить базу данных с размером блока данных 16 КБ в базу с размером блока 8 КБ. Если же это невозможно, рекомендуется создать в табличных пространствах сегменты LOB с размером блока 8 КБ. Для этого нужно выделить буфер кэширования 8 КБ в глобальной области системы Oracle (SGA).
При использовании размеров блока 4 КБ и 2 КБ затраты составляют еще меньше, но снижение эффективности ввода/вывода не оправдывает их использование.
Индекс LOB используется, только если количество адресуемых локатором LOB блоков превышает 12. В ином случае за адресацию первых 12 блоков отвечает локатор LOB.
На следующих трех рисунках иллюстрируется три возможных примера сохранения бинарных данных в столбце BLOB. В первом случае в строке хранится 3000 байт бинарных данных, поскольку 3000 байт меньше порогового ограничения объема хранения в строке в 3965 байт. Если хранение внутри строк в столбце BLOB не отключено, сегмент LOB и индекс LOB не используются. Обычно это обеспечивает увеличение скорости доставки данных BLOB в связи с уменьшением числа операций ввода/вывода, поскольку Oracle не требуется получать доступ к сегменту LOB или индексу LOB.
На следующем рисунке проиллюстрирован второй пример, в котором размер бинарных данных превышает 3964 байт (в этом случае размер данных составляет 81920 байт), и данные не помещаются внутри строк. В связи с этим, локатор LOB ссылается на бинарные данные, которые хранятся в сегменте LOB. Поскольку бинарные данные не занимают более 12 блоков в сегменте LOB, локатор LOB сохраняет его адреса. В этом случае индекс LOB не используется.
На последнем рисунке показаны бинарные данные такого большого размера (106496 байт), что для их размещения требуется индекс LOB. В этом случае размер бинарных данных превышает ограничение для хранения внутри строк, и для их хранения требуется более 12 блоков в сегменте LOB. Для данных такого размера локатор LOB ссылается на индекс LOB для получения месторасположения блоков внутри сегмента LOB. Эта ситуация чрезвычайно редко встречается для векторных данных, а для растровых данных ее можно избежать.
Сведения о настройке хранения BLOB см. в разделе Параметры конфигурации Oracle.