Relationships between datasets in a geodatabase in SQL Server
Relationships manage associations between objects in one table and objects in another. Creating relationship classes between tables in your geodatabase can help maintain referential integrity, allows you to more efficiently edit related tables, and gives you the ability to query related tables. The following types of relationships between tables in a geodatabase are supported:
- Spatial relationship—Relates feature to feature
- Nonspatial relationship—Relates row to row
- Spatial to nonspatial relationship—Relates feature to row
Just as features are stored in a feature class and nonspatial rows are stored in tables, relationships are stored and managed in a relationship class.
For details on relationships and relationship class cardinality, see Relationship class properties.
Relationships in ArcGIS for Desktop
In the Catalog tree, relationship classes appear as part of a feature dataset. Relationship classes are represented with the following icon:
You can view information about relationship classes by right-clicking the relationship class and clicking Properties to open the Relationship Class Properties dialog box.
Feature-linked annotation is a type of relationship class. On the Relationship Class Properties dialog box, you can see that the ud_reloriginfc feature class participates in a one-to-many relationship with the ud_reldestfc annotation feature class. The records in the tables are joined based on the ObjectID in the ud_reloriginfc feature class and the col_featureid in the ud_reldestfc feature class. This is a composite relationship class, which means changes in one table affect or alter features in the related table. In this case, changes made to the origin class (ud_reloriginfc) triggers a change in the destination feature class (ud_reldestfc). This is referred to as forward notification.
Relationship classes in a Microsoft SQL Server database
Relationship classes are stored in the GDB_ITEMS and GDB_ITEMRELATIONSHIPS tables.
Relationship classes in an XML document
Relationship classes appear in XML documents as a type of data element. The following is a portion of an XML document from a dataset containing a relationship class.
<DataElement xsi:type="esri:DERelationshipClass">
<CatalogPath>/V=sde.DEFAULT/FD=sde.RJP.Landbase_rel/RC=sde.RJP.prcl2bld</CatalogPath>
<Name>spdb.RJP.prcl2bld</Name>
<DatasetType>esriDTRelationshipClass</DatasetType>
<DSID>-1</DSID>
<Versioned>true</Versioned>
<CanVersion>true</CanVersion>
<HasOID>true</HasOID>
<OIDFieldName>RID</OIDFieldName>
<Fields xsi:type="esri:Fields">
<FieldArray xsi:type="esri:ArrayOfField">
<Field xsi:type="esri:Field">
<Name>RID</Name>
<Type>esriFieldTypeOID</Type>
<IsNullable>false</IsNullable>
<Length>4</Length>
<Precision>10</Precision>
<Scale>0</Scale>
<Required>true</Required>
<Editable>false</Editable>
</Field>
<Field xsi:type="esri:Field">
<Name>APN</Name>
<Type>esriFieldTypeInteger</Type>
<IsNullable>true</IsNullable>
<Length>4</Length>
<Precision>10</Precision>
<Scale>0</Scale>
</Field>
<Field xsi:type="esri:Field">
<Name>bldg_id</Name>
<Type>esriFieldTypeInteger</Type>
<IsNullable>true</IsNullable>
<Length>4</Length>
<Precision>10</Precision>
<Scale>0</Scale>
</Field>
</FieldArray>
</Fields>
<Indexes xsi:type="esri:Indexes">
<IndexArray xsi:type="esri:ArrayOfIndex">
<Index xsi:type="esri:Index">
<Name>R249_SPDB_ROWID_UK</Name>
<IsUnique>true</IsUnique>
<IsAscending>true</IsAscending>
<Fields xsi:type="esri:Fields">
<FieldArray xsi:type="esri:ArrayOfField">
<Field xsi:type="esri:Field">
<Name>RID</Name>
<Type>esriFieldTypeOID</Type>
<IsNullable>false</IsNullable>
<Length>4</Length>
<Precision>10</Precision>
<Scale>0</Scale>
<Required>true</Required>
<Editable>false</Editable>
</Field>
</FieldArray>
</Fields>
</Index>
<Index xsi:type="esri:Index">
<Name>GDB_9_APN</Name>
<IsUnique>false</IsUnique>
<IsAscending>true</IsAscending>
<Fields xsi:type="esri:Fields">
<FieldArray xsi:type="esri:ArrayOfField">
<Field xsi:type="esri:Field">
<Name>APN</Name>
<Type>esriFieldTypeInteger</Type>
<IsNullable>true</IsNullable>
<Length>4</Length>
<Precision>10</Precision>
<Scale>0</Scale>
</Field>
</FieldArray>
</Fields>
</Index>
<Index xsi:type="esri:Index">
<Name>GDB_9_bldg_id</Name>
<IsUnique>false</IsUnique>
<IsAscending>true</IsAscending>
<Fields xsi:type="esri:Fields">
<FieldArray xsi:type="esri:ArrayOfField">
<Field xsi:type="esri:Field">
<Name>bldg_id</Name>
<Type>esriFieldTypeInteger</Type>
<IsNullable>true</IsNullable>
<Length>4</Length>
<Precision>10</Precision>
<Scale>0</Scale>
</Field>
</FieldArray>
</Fields>
</Index>
</IndexArray>
</Indexes>
<CLSID>{A07E9CB1-9A95-11D2-891A-0000F877762D}</CLSID>
<EXTCLSID />
<RelationshipClassNames xsi:type="esri:Names" />
<AliasName>spdb.RJP.prcl2bld</AliasName>
<ModelName />
<HasGlobalID>false</HasGlobalID>
<GlobalIDFieldName />
<RasterFieldName />
<ExtensionProperties xsi:type="esri:PropertySet">
<PropertyArray xsi:type="esri:ArrayOfPropertySetProperty" />
</ExtensionProperties>
<ControllerMemberships xsi:type="esri:ArrayOfControllerMembership" />
<Cardinality>esriRelCardinalityManyToMany</Cardinality>
<Notification>esriRelNotificationBoth</Notification>
<IsAttributed>true</IsAttributed>
<IsComposite>true</IsComposite>
<OriginClassNames xsi:type="esri:Names">
<Name>spdb.RJP.Parcels_1</Name>
</OriginClassNames>
<DestinationClassNames xsi:type="esri:Names">
<Name>spdb.RJP.bldgs</Name>
</DestinationClassNames>
<KeyType>esriRelKeyTypeSingle</KeyType>
<ClassKey>esriRelClassKeyUndefined</ClassKey>
<ForwardPathLabel>spdb.RJP.bldgs</ForwardPathLabel>
<BackwardPathLabel>spdb.RJP.Parcels_1</BackwardPathLabel>
<IsReflexive>false</IsReflexive>
<OriginClassKeys xsi:type="esri:ArrayOfRelationshipClassKey">
<RelationshipClassKey xsi:type="esri:RelationshipClassKey">
<ObjectKeyName>APN</ObjectKeyName>
<ClassKeyName />
<KeyRole>esriRelKeyRoleOriginPrimary</KeyRole>
</RelationshipClassKey>
<RelationshipClassKey xsi:type="esri:RelationshipClassKey">
<ObjectKeyName>APN</ObjectKeyName>
<ClassKeyName />
<KeyRole>esriRelKeyRoleOriginForeign</KeyRole>
</RelationshipClassKey>
</OriginClassKeys>
<DestinationClassKeys xsi:type="esri:ArrayOfRelationshipClassKey">
<RelationshipClassKey xsi:type="esri:RelationshipClassKey">
<ObjectKeyName>BLDG_ID</ObjectKeyName>
<ClassKeyName />
<KeyRole>esriRelKeyRoleDestinationPrimary</KeyRole>
</RelationshipClassKey>
<RelationshipClassKey xsi:type="esri:RelationshipClassKey">
<ObjectKeyName>bldg_id</ObjectKeyName>
<ClassKeyName />
<KeyRole>esriRelKeyRoleDestinationForeign</KeyRole>
</RelationshipClassKey>
</DestinationClassKeys>
<RelationshipRules xsi:type="esri:ArrayOfRelationshipRule" />
</DataElement>