Skip to main content

5. Relatiebeheer

Deze pagina is de ERD-inzoomlaag voor het databasehoofdstuk 02_relatiebeheer.md. De tabeldefinities in dat brondocument blijven leidend; deze pagina biedt een leesbare visuele ingang en een compacte inventaris.

5.1 Waar dit domein over gaat

Relatiebeheer legt formele accountkoppelingen vast. Het domein is bewust rolcontext-gevoelig: dezelfde twee natuurlijke personen kunnen meerdere relaties met elkaar hebben wanneer het relatietype of de rolcontext verschilt.

Voorbeelden:

  • leerling-leerling als Friendship;
  • docent-leerling als TeacherStudent;
  • ouder/voogd-leerling als GuardianStudent;
  • docent-docent als TeacherTeacher;
  • beheerder-beheerder als systeemmatige AdminAdmin-relatie.

5.2 Compact deel-ERD

Het compacte ERD toont alleen harde database-FK's binnen het relationship-domein. Verwijzingen naar Users en Roles zijn functionele soft links en worden apart getoond.

De relatie- en uitnodigingstabellen bewaren gebruikers- en rolcontexten functioneel, maar leggen geen harde database-FK's naar identity of authorization. Validatie loopt via applicatielogica en publieke modulecontracten.

5.4 Detailzoom: uitnodiging naar actieve relatie

De uitnodiging en de uiteindelijke relatie zijn bewust gescheiden. Daardoor kan een uitnodiging al bestaan voordat er een doelaccount is (ToUserId is nullable), en blijft acceptatie/afwijzing/verloop auditbaar zonder dat daarvoor een actieve relatie hoeft te bestaan.

5.5 Detailzoom: rolcontext in relaties

Deze rolcontext is functioneel belangrijk. Een gebruiker die zowel docent als ouder/voogd is, kan bijvoorbeeld in beide hoedanigheden een aparte relatie met dezelfde leerling hebben. Acties op de ene relatie mogen de andere relatie niet impliciet aanpassen. De verwijzingen naar Users en Roles zijn soft links; de harde database-FK binnen dit deel blijft beperkt tot RelationshipTypeId -> RelationshipTypes.Id.

5.6 Tabellen in dit domein

TabelCategorieDoel / verantwoordelijkheidBrongebruik
RelationshipTypesRelatiebeheerDefinitie van beschikbare relatietypen zoals vriendschap, docent-leerling en ouder/voogd-leerling.Begrenst welke relatievormen functioneel bestaan.
RelationshipInvitationsRelatiebeheerRegistreert uitnodigingen voor nieuwe relaties, inclusief doel-e-mailadres, rolcontext, status en afhandeling.Bron voor openstaande en afgehandelde uitnodigingen.
UserRelationshipsRelatiebeheerVastgelegde relatie tussen twee gebruikers binnen een specifiek relatietype en rol-context-combinatie.Bron voor actieve relatiecontext en veel autorisatievragen.
RelationshipEventsRelatiebeheerAudit- en gebeurtenissenlog voor relatie- en uitnodigingsgerelateerde acties.Ondersteunt reconstructie van acceptatie, afwijzing, verloop, ontkoppeling en systeemacties.

5.7 Relatie-startpunt binnen dit domein

BrontabelVeldVerwijst naarType verwijzingNullableBetekenis
RelationshipInvitationsRelationshipTypeIdRelationshipTypes.IdHarde FKNBeoogd relatietype binnen relationships.
RelationshipInvitationsFromUserIdUsers.IdSoft linkNUitnodigende gebruiker; geen harde FK naar identity.
RelationshipInvitationsFromRoleIdRoles.IdSoft linkNRolcontext van de uitnodiger; geen harde FK naar authorization.
RelationshipInvitationsToUserIdUsers.IdSoft linkJBestaand doelaccount, indien al bekend.
RelationshipInvitationsTargetRoleIdRoles.IdSoft linkNVerwachte rolcontext van ontvanger.
RelationshipInvitationsRespondedByUserIdUsers.IdSoft linkJGebruiker die acceptatie of afwijzing uitvoerde.
RelationshipInvitationsResolvedRelationshipIdUserRelationships.IdHarde FKJRelatie die bij acceptatie is ontstaan.
UserRelationshipsRelationshipTypeIdRelationshipTypes.IdHarde FKNType van de actieve of historische relatie.
UserRelationshipsFromUserIdUsers.IdSoft linkNEerste zijde van de relatie.
UserRelationshipsFromRoleIdRoles.IdSoft linkNRolcontext van eerste zijde.
UserRelationshipsToUserIdUsers.IdSoft linkNTweede zijde van de relatie.
UserRelationshipsToRoleIdRoles.IdSoft linkNRolcontext van tweede zijde.
UserRelationshipsInitiatedByUserIdUsers.IdSoft linkNInitiërende actor.
UserRelationshipsInitiatedFromRoleIdRoles.IdSoft linkNInitiërende rolcontext.
UserRelationshipsDeactivatedByUserIdUsers.IdSoft linkJActor die de relatie beëindigde.
RelationshipEventsRelationshipIdUserRelationships.IdHarde FKJBetrokken relatie, indien van toepassing.
RelationshipEventsInvitationIdRelationshipInvitations.IdHarde FKJBetrokken uitnodiging, indien van toepassing.
RelationshipEventsActorUserIdUsers.IdSoft linkJActor van de gebeurtenis.
RelationshipEventsActorRoleIdRoles.IdSoft linkJRolcontext van actor.
RelationshipEventsTargetUserIdUsers.IdSoft linkJDoelgebruiker van de gebeurtenis.

5.8 Relatiebeheer als autorisatievoorwaarde

RelatietypeFunctioneel gevolgWordt verder gebruikt in
FriendshipMaakt delen van afgeronde oefeningen tussen leerlingen mogelijk, mits delen is toegestaan.Oefenruns/delen, privéberichten.
TeacherStudentVoorwaarde voor docent-leerlingcontext en niveauautorisaties.Docentstructuur, geschiedenis, live meekijken.
GuardianStudentVoorwaarde voor ouder-/voogdinzage, resultaten, geschiedenis en live meekijken.Ouder/voogdweergaven, oefenruns, live.
TeacherTeacherVoorwaarde voor samenwerking/collaborators op niveau-laag.Docentstructuur en eigenaarschap.
AdminAdminSysteemmatige beheerder-beheerdercontext.Beheercommunicatie en beheercontext.

5.9 Bewuste uitzonderingen en aandachtspunten

  • RelationshipTypes.Code en RelationshipInvitations.Status zijn functionele sleutelwaarden, geen FK naar aparte statustabellen.
  • ToEmail is een logische koppelwaarde voor uitnodigingen naar nog onbekende accounts en heeft bewust geen FK.
  • AdminAdmin gebruikt geen normale uitnodigingsflow; die relatie wordt systeemmatig afgeleid/aangemaakt voor actieve beheerders.
  • Ontkoppelen betekent soft-deactivatie van UserRelationships, niet hard delete.
  • Relatie-eventregels zijn audit/historie en vervangen niet de actuele bronstatus van uitnodiging of relatie.

5.10 Zoompad vanaf deze pagina

VervolgGebruik wanneer...
Identiteit en autorisatieje rolcontexten of gebruikersbasis wilt controleren.
Docentstructuur en leerlingtoegangje wilt weten hoe een docent-leerlingrelatie leidt tot niveauautorisatie.
Oefenruns, delen en voortgangje wilt weten hoe vriendschappen delen van oefeningen mogelijk maken.
Communicatie en notificatiesje wilt weten hoe uitnodigingen of ontkoppelingen via systeemberichten zichtbaar worden.