Bijgewerkt op 7 februari 2022
Het lijkt erop dat er altijd verwarring is geweest rond de termen "relate" en "relationship class." In dit bericht zullen we proberen dit op te helderen. De voorbeeldscreenshots zijn afkomstig van ArcMap, maar de concepten zijn ook van toepassing op ArcGIS Pro.
De basis
- Een relate (ook wel een table relate genoemd) is een eigenschap van een laag in ArcGIS Pro of ArcMap. Je maakt een table relate zodat je kunt query'en en objecten in de ene laag kunt selecteren en alle gerelateerde objecten in een andere laag of tabel kunt zien. Een table relate bestaat alleen in een kaart- of laagsbestand (.lyr).

- Een relationship class is een object in een geodatabase dat informatie opslaat over een relatie tussen twee feature classes, tussen een feature class en een niet-ruimtelijke tabel, of tussen twee niet-ruimtelijke tabellen. Beide deelnemers aan een relationship class moeten in dezelfde geodatabase worden opgeslagen.
- Cardinaliteit bepaalt hoe relates en relationship classes worden opgezet. Cardinaliteit is geen maat voor de ijver van een honkbal-fan uit St. Louis, het is een beschrijving van hoe records in twee verschillende tabellen met elkaar verbonden zijn. Cardinaliteit kan one-to-one, one-to-many, many-to-one, of many-to-many zijn.
- Table relates worden gemaakt tussen tabellen die een one-to-many of many-to-one cardinaliteit hebben. Relationship classes ondersteunen alle cardinaliteiten.
- Wanneer je een table relate of een relationship class maakt, specificeer je het veld in elke tabel waarop de relatie gebaseerd zal zijn. De velden moeten hetzelfde datatype hebben (bijv. tekst, short integer, long integer, object ID, enz.).
- Relates kunnen worden gemaakt en bewerkt met een Basic, Standard, of Advanced licentie.
- Relationship classes kunnen worden gemaakt en bewerkt met een Standard of Advanced licentie. Ze zijn alleen-lezen met een Basic licentie.
Alles duidelijk nu? Nee? Oké, laten we dieper ingaan.
Het voorbeeld

In de inhoudsopgave van de bovenstaande kaart zie je een laag van stadsbrandweerkazernes en een niet-ruimtelijke tabel die gegevens opslaat over het brandweerpersoneel van de stad. Er is een table relate gemaakt tussen de laag en de niet-ruimtelijke tabel gebaseerd op een short integer veld in elke tabel dat het ID-nummer van de brandweerkazerne opslaat.
Wat gebeurt er als er een kazerne op de kaart wordt geselecteerd?
Hieronder zie je de attributentabel voor de brandweerkazerne-laag en de brandweerpersoneel-tabel. De optie om alleen geselecteerde objecten te tonen wordt gebruikt voor beide tabellen. Merk op dat terwijl slechts één brandweerkazerne-record is geselecteerd (de Washington-kazerne), zes records in de brandweerpersoneel-tabel zijn geselecteerd.

Dit vertelt je dat de Fire Stations-laag een one-to-many cardinaliteit heeft met de brandweerpersoneel-tabel. Voor elke brandweerkazerne zijn meerdere brandweerlieden gekoppeld. In dit geval zijn zes brandweerlieden toegewezen aan de Washington-kazerne. Omdat de tabellen gerelateerd zijn, kun je bij het selecteren van een kazerne gemakkelijk zien wie er bij die kazerne werkt. Table relates zijn bidirectioneel, wat betekent dat je ook een record in de brandweerpersoneel-tabel kunt selecteren en toegang krijgt tot de naam van de kazerne waaraan die brandweerman is toegewezen.
Je hoeft zelfs geen object te selecteren of de tabellen te openen; je kunt snel informatie bekijken met behulp van het Identify-gereedschap. De naam van de gerelateerde tabel wordt weergegeven onder de naam van het object aan de linkerkant van het Identify-venster. Het uitklappen van de gerelateerde tabel toont de gerelateerde records. Door op een gerelateerd record te klikken, worden de gegevens weergegeven die in die gerelateerde tabel zijn opgeslagen.

Stel dat Brian Butler overplaatst wordt naar de Adams-kazerne. Je gaat de FirePersonnel-tabel bewerken om dit weer te geven. Hier zijn de stappen om dit te doen met ons voorbeeld.
- Start een bewerksessie.
- Selecteer in de Fire Personnel-tabel het record van Brian Butler.
- Wijzig in het Number_-veld de waarde naar 1714 (het ID-nummer voor de Adams-kazerne).
- Sluit de tabel en sla je bewerkingen op.
- Klik met het Identify-gereedschap op de Adams-kazerne.
- Brian Butler verschijnt nu in de lijst van personeel dat aan de Adams-kazerne is gekoppeld.

- Klik met het Identify-gereedschap op de Washington-kazerne.
- Het record van Brian Butler wordt niet meer weergegeven.

Waarom gebruik je een Relationship Class?
Table relates zijn handig om snel toegang te krijgen tot en informatie te bekijken over zaken uit de echte wereld die daadwerkelijk in twee verschillende tabellen zijn opgeslagen. Relationship classes bieden echter krachtigere mogelijkheden.
Buiten het selecteren van records in één tabel en het zien van gerelateerde records in de andere, kun je met een relationship class regels en eigenschappen instellen die bepalen wat er gebeurt wanneer gegevens in één van beide tabellen worden bewerkt, evenals ervoor zorgen dat alleen geldige bewerkingen worden uitgevoerd. Je kunt zo'n relationship class instellen zodat het bewerken van een record in één tabel automatisch gerelateerde records in de andere tabel bijwerkt.
Aanvullend op het bovenstaande voorbeeld, stel dat er een relationship class wordt gemaakt tussen de Fire Stations-laag en de brandweerpersoneel-tabel. De stad heeft als eis dat alle kazernes minimaal vijf brandweerlieden en maximaal vijftien brandweerlieden hebben toegewezen gekregen. Er is voor deze relationship class een regel gemaakt die aan deze eis voldoet.
Aan het einde van het table relate-voorbeeld had de Washington-kazerne vijf toegewezen brandweerlieden. Nu, met deze relationship class actief, als iemand probeert om aan één van deze brandweerlieden een ander kazerne-nummer toe te wijzen, verschijnt er een foutmelding en begrijpen ze dat er een regel bestaat die vereist dat alle kazernes ten minste vijf brandweerlieden toegewezen moeten hebben. Voordat ze het kazerne-nummer kunnen wijzigen voor deze bestaande brandweerman, moeten ze eerst een nieuwe brandweerman toewijzen aan de Washington-kazerne. Daarna kunnen ze het kazerne-nummer wijzigen om zo een overdracht weer te geven.
De relationship class zorgt ervoor dat data-bewerkingen geldig zijn en ondersteunt het doel van het brandweerkorps om personeelsindelingen conform te laten zijn aan deze stadsvereiste.
Onthoud
- Table relates bestaan alleen binnen een kaart- of laagsbestand.
- Relationship classes bestaan als afzonderlijke objecten binnen een geodatabase. Als één van de deelnemende tabellen uit de geodatabase wordt verwijderd, wordt ook de relationship class verwijderd.
- Zowel table relates als relationship classes stellen gebruikers in staat om informatie over gerelateerde objecten vanuit beide tabellen te benaderen en bekijken.
- Relationship classes worden vaak gebruikt om data-integriteit te waarborgen. Ze maken je geodatabase slimmer.
Er valt nog veel meer te zeggen over relates en relationship classes, maar omwille van eenvoud beëindigen we hier dit bericht. Hopelijk is wat verwarring hiermee weggenomen. Voor meer informatie over dit onderwerp kun je deze help-topic raadplegen.