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:

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.

Relationship Class Properties dialog box

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>
11/14/2016