Поля уникальных идентификаторов в таблицах базы данных
Все таблицы и классы пространственных объектов ArcGIS должны содержать поле, уникально идентифицирующее каждый объект или каждую запись таблицы.
Для использования в качестве поля уникальных идентификаторов, поле не должно быть нулевым, должно содержать уникальные значения и иметь один из следующих типов:
- целое (только положительные значения)
- строчное (string)
- GUID
- дата
Значения, однозначно идентифицирующие объекты или строки в ArcGIS, должны быть или уникальными, или нулевыми. Вы обязаны гарантировать, чтобы при запросе в данных полях встречались такие значения.
Если ArcGIS обнаружит нулевое значение, то вы получите сообщение об ошибке и ArcGIS не будет обеспечивать уникальность значений поля идентификатора в слое запросов или в таблице базы данных. Если ArcGIS встречает такое значение, ошибка не возвращается; однако, можно просмотреть неподходящие результаты в выборке или других запросах в ArcGIS.
ArcGIS считает первое поле с ненулевыми значениями полем с уникальными идентификаторами, когда вы перетаскиваете таблицу из дерева Каталога в ArcMap или проверяете определение слоя запросов. Вы можете использовать это поле или открыть запрос и выбрать другое поле или несколько полей, содержащих уникальные идентификаторы. Более подробно см. Выбор поля уникального идентификатора.
Использование одного поля уникального идентификатора
Если указано единственное поле уникального идентификатора, ArcGIS непосредственно применяет значения из этого поля для уникальной идентификации всех объектов и строк таблицы базы данных.
Если в вашей таблице базы данных нет поля, которое может хранить уникальные идентификаторы, и вы используете базу данных Microsoft SQL Server, Oracle или PostgreSQL, вы можете запустить инструмент геообработки Добавить поле прирастающего идентификатора (Add Incrementing ID Field), чтобы добавить целочисленное поле уникального идентификатора к таблице.
Если в качестве поля уникального идентификатора используется одно текстовое поле, ArcGIS должен привести эти значения в целочисленный формат. Это происходит в ArcGIS каждый раз, когда системе необходим атрибут ObjectID, например, при создании выборки карты или открывании атрибутивной таблицы. ArcGIS добавит атрибут ESRI_OID и сохранит в него уникальное целочисленное значение. Этот атрибут является лишь частью определения слоя; таблица базы данных не изменяется.
Использование составного уникального идентификатора
Вы можете выбрать одно или несколько полей для хранения уникального идентификатора. Если вы решите использовать несколько полей, составные значения этих полей должны быть уникальными. В следующем примере показаны два текстовых поля: member_surname и signup_date. По отдельности значения в этих полях не обязательно должны быть уникальными. Но при составлении их комбинации, значения уникальны, как показано ниже:
member_surname | signup_date |
---|---|
alfred | 2006-09-28 10:15:41 |
dewey | 2006-09-28 10:15:56 |
johnson | 2000-02-19 09:14:50 |
johnson | 2004-12-08 11:02:32 |
mujan | 2011-07-07 12:44:21 |
Комбинация этих значений будет использоваться в качестве ключа для создания уникального целочисленного значения, которое будет сохранено в поле ESRI_OID. Этот атрибут является частью только определения слоя; таблица базы данных не изменяется.
Определение слоя в предыдущем примере будет содержать столбец ESRI_OID, как показано ниже:
member_surname | signup_date | ESRI_OID |
---|---|---|
alfred | 2006-09-28 10:15:41 | 1 |
dewey | 2006-09-28 10:15:56 | 2 |
johnson | 2000-02-19 09:14:50 | 3 |
johnson | 2004-12-08 11:02:32 | 4 |
mujan | 2011-07-07 12:44:21 | 5 |
Помните, что если комбинированные значения в полях или указанном вами одном текстовом поле не являются уникальными, ArcGIS рассматривает эти записи как идентичные и присвоит им одинаковые значения ESRI_OID.
Если в вашей таблице уже есть поле ESRI_OID, к определению слоя будет добавлен атрибут ESRI_OID_1.
Вы не сможете опубликовать класс пространственных объектов, использующий составной уникальный идентификатор, в качестве редактируемого сервиса объектов.