Создать класс отношений (Управление данными)
Резюме
Этот инструмент создает класс отношений для хранения связей между полями или пространственными объектами в исходной таблице и таблице-адресате.
Использование
-
Отношения могут существовать между пространственными объектами (объекты в классах пространственных объектов), непространственными объектами (строки в таблице) или пространственными и непространственными объектами.
-
После создания класс отношений не поддается изменению; вы можете только добавить, удалить или переименовать его правила. Классы отношений можно удалить и переименовать с помощью ArcCatalog таким же образом, как любой объект в базе данных.
-
Для классов отношений многие-ко-многим, в базе данных создается новая таблица для хранения внешних ключей, используемых для связи исходных классов и классов-адресатов. Эта таблица может также иметь другие поля для хранения атрибутов отношений, которые не являются атрибутами ни класса-источника, ни класса-адресата. Например, в базе данных участков может быть класс отношений между участками и владельцами, где владельцы «владеют» участками, а участки «находятся во владении» владельцев. Атрибутом этого отношения может быть собственность в процентах. Классы отношений один-к-одному и один-ко-многим также могут иметь атрибуты; в этом случае создается таблица для хранения этих отношений.
-
Простые отношения (между равными объектами) вовлекают в базу данных два или более объектов, которые существуют независимо друг от друга. Например, в сети железных дорог могут быть железнодорожные стрелки, которые имеют одну или несколько связанных сигнальных ламп. Однако, железнодорожная стрелка может существовать без семафора, а семафоры могут существовать в железнодорожной сети и там, где нет стрелок. Простые отношения могут иметь кардинальность «один к одному», «один ко многим» или «многие ко многим».
-
Сложное отношение - это то, в котором продолжительность существования объектов контролирует продолжительность существования связанных объектов. Например, электрические столбы поддерживают трансформаторы, а трансформаторы установлены на столбах. После удаления столба, сообщение об удалении распространяется и на связанные с ним трансформаторы, которые удаляются из класса трансформаторов. Сложные отношения всегда «один ко многим».
-
Описания прямого и обратного отношения поясняют отношение, связывающее один объект с другим. Описание прямого отношения описывает отношение класса-источника к классу-адресату. В примере столб-трансформатор, прямой подписью пути может быть «Столбы поддерживают трансформаторы». Описание обратного отношения поясняет отношение класса-адресата к классу-источнику. В примере столб-трансформатор, обратной подписью пути может быть «Трансформаторы устанавливаются на столбах».
-
Классы отношений также могут быть созданы в ArcCatalog. Выберите в контекстном меню базы геоданных команду Новый (New) > Класс отношений (Relationship Class).
Синтаксис
Параметр | Объяснение | Тип данных |
origin_table |
Таблица класса пространственных объектов, которая связана с таблицей-адресатом. | Table View |
destination_table |
Таблица, которая связана с исходной таблицей. | Table View |
out_relationship_class |
Создаваемый класс отношений. | Relationship Class |
relationship_type |
Тип отношений между таблицей-источником и таблицей-адресатом.
| String |
forward_label |
Имя для уникальной идентификации отношения, используемое при обращении к таблице-адресату через таблицу-источник. | String |
backward_label |
Имя для уникальной идентификации отношения, используемое при обращении к таблице-источнику через таблицу-адресат. | String |
message_direction |
Направление, в котором передаются сообщения между исходной таблицей и таблицей-адресатом. Например, в отношении между столбами и трансформаторами, при удалении столба, он отправляет сообщение связанным с ним объектам трансформатора, информируя их о его удалении.
| String |
cardinality |
Определяет, сколько может существовать отношений между строками или объектами таблицы-источника и строками или объектами таблицы-адресата.
| String |
attributed |
Определяет, будет ли класс отношений иметь атрибуты.
| Boolean |
origin_primary_key |
Поле в таблице-источнике, как правило это поле OID, которое связывает его с полем внешнего ключа-источника в таблице класса отношений. | String |
origin_foreign_key |
Поле в таблице класса отношений, которое связано с полем Ключ объекта-источника (Origin Primary Key) в исходной таблице. | String |
destination_primary_key (дополнительно) |
Поле в таблице-адресате, как правило это поле OID, которое связывает его с полем внешнего ключа адресата в таблице класса отношений. | String |
destination_foreign_key (дополнительно) |
Поле в таблице класса отношений, которое связано с полем Первичный ключ адресата (Destination Primary Key) в таблице-адресате. | String |
Пример кода
На следующем скрипте окна Python демонстрируется, как использовать инструмент Создать класс отношений (Create Relationship Class).
import arcpy
arcpy.env.workspace = "C:/data/Habitat_Analysis.gdb"
arcpy.CreateRelationshipClass_management("vegtype", "vegtable", "veg_RelClass", "SIMPLE", "Attributes from vegtable", "Attributes and Features from vegtype", "NONE", "ONE_TO_ONE", "NONE", "HOLLAND95", "HOLLAND95")
Создайте класс отношений между классом объектов растительности и таблицей с дополнительной информацией о растительности.
# Name: CreateRelationshipClass.py
# Description: Create a relationship class between vegetation feature
# class and table with additional vegetation information
# Author: ESRI
# import system modules
import arcpy
from arcpy import env
# Set environment settings
env.workspace = "C:/data"
# Copy vegtable.dbf to file gdb table, since both tables to be related
# must be in the same database
vegDbf = "vegtable.dbf"
vegTbl = "Habitat_Analysis.gdb/vegtable"
arcpy.CopyRows_management(vegDbf, vegTbl)
# Create simple relationship class between 'vegtype' vegetation layer
# and 'vegtable' table with additional vegetation information
veg = "Habitat_Analysis.gdb/vegtype"
relClass = "Habitat_Analysis.gdb/veg_RelClass"
forLabel = "Attributes from vegtable"
backLabel = "Attributes and Features from vegtype"
primaryKey = "HOLLAND95"
foreignKey = "HOLLAND95"
arcpy.CreateRelationshipClass_management(veg, vegTbl, relClass, "SIMPLE", forLabel,
backLabel, "NONE", "ONE_TO_ONE",
"NONE", primaryKey, foreignKey)
Создание класса отношений между классом объектов участков и таблицей с информацией о владельцах.
# Name: CreateRelationshipClass.py
# Description: Create a relationship class between parcels feature
# class and table with owner information
# Author: ESRI
# import system modules
import arcpy
from arcpy import env
# Set environment settings
env.workspace = "C:/data"
# Copy owners.dat to file gdb table, since both tables to be related
# must be in the same database
ownerDat = "owners.dat"
ownerTbl = "Montgomery.gdb/owners"
arcpy.CopyRows_management(ownerDat, ownerTbl)
# Create simple relationship class between 'parcel' parcel layer
# and 'owner' table with additional parcel owner information
parcel = "Montgomery.gdb/Parcels"
relClass = "Montgomery.gdb/parcelowners_RelClass"
forLabel = "Owns"
backLabel = "Is Owned By"
primaryKey = "PROPERTY_ID"
foreignKey = "PROPERTY_I"
arcpy.CreateRelationshipClass_management(ownerTbl, parcel, relClass, "SIMPLE", forLabel,
backLabel, "BACKWARD", "ONE_TO_MANY",
"NONE", primaryKey, foreignKey)