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.
5.3 Soft links naar identiteit en autorisatie
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
| Tabel | Categorie | Doel / verantwoordelijkheid | Brongebruik |
|---|---|---|---|
RelationshipTypes | Relatiebeheer | Definitie van beschikbare relatietypen zoals vriendschap, docent-leerling en ouder/voogd-leerling. | Begrenst welke relatievormen functioneel bestaan. |
RelationshipInvitations | Relatiebeheer | Registreert uitnodigingen voor nieuwe relaties, inclusief doel-e-mailadres, rolcontext, status en afhandeling. | Bron voor openstaande en afgehandelde uitnodigingen. |
UserRelationships | Relatiebeheer | Vastgelegde relatie tussen twee gebruikers binnen een specifiek relatietype en rol-context-combinatie. | Bron voor actieve relatiecontext en veel autorisatievragen. |
RelationshipEvents | Relatiebeheer | Audit- en gebeurtenissenlog voor relatie- en uitnodigingsgerelateerde acties. | Ondersteunt reconstructie van acceptatie, afwijzing, verloop, ontkoppeling en systeemacties. |
5.7 Relatie-startpunt binnen dit domein
| Brontabel | Veld | Verwijst naar | Type verwijzing | Nullable | Betekenis |
|---|---|---|---|---|---|
RelationshipInvitations | RelationshipTypeId | RelationshipTypes.Id | Harde FK | N | Beoogd relatietype binnen relationships. |
RelationshipInvitations | FromUserId | Users.Id | Soft link | N | Uitnodigende gebruiker; geen harde FK naar identity. |
RelationshipInvitations | FromRoleId | Roles.Id | Soft link | N | Rolcontext van de uitnodiger; geen harde FK naar authorization. |
RelationshipInvitations | ToUserId | Users.Id | Soft link | J | Bestaand doelaccount, indien al bekend. |
RelationshipInvitations | TargetRoleId | Roles.Id | Soft link | N | Verwachte rolcontext van ontvanger. |
RelationshipInvitations | RespondedByUserId | Users.Id | Soft link | J | Gebruiker die acceptatie of afwijzing uitvoerde. |
RelationshipInvitations | ResolvedRelationshipId | UserRelationships.Id | Harde FK | J | Relatie die bij acceptatie is ontstaan. |
UserRelationships | RelationshipTypeId | RelationshipTypes.Id | Harde FK | N | Type van de actieve of historische relatie. |
UserRelationships | FromUserId | Users.Id | Soft link | N | Eerste zijde van de relatie. |
UserRelationships | FromRoleId | Roles.Id | Soft link | N | Rolcontext van eerste zijde. |
UserRelationships | ToUserId | Users.Id | Soft link | N | Tweede zijde van de relatie. |
UserRelationships | ToRoleId | Roles.Id | Soft link | N | Rolcontext van tweede zijde. |
UserRelationships | InitiatedByUserId | Users.Id | Soft link | N | Initiërende actor. |
UserRelationships | InitiatedFromRoleId | Roles.Id | Soft link | N | Initiërende rolcontext. |
UserRelationships | DeactivatedByUserId | Users.Id | Soft link | J | Actor die de relatie beëindigde. |
RelationshipEvents | RelationshipId | UserRelationships.Id | Harde FK | J | Betrokken relatie, indien van toepassing. |
RelationshipEvents | InvitationId | RelationshipInvitations.Id | Harde FK | J | Betrokken uitnodiging, indien van toepassing. |
RelationshipEvents | ActorUserId | Users.Id | Soft link | J | Actor van de gebeurtenis. |
RelationshipEvents | ActorRoleId | Roles.Id | Soft link | J | Rolcontext van actor. |
RelationshipEvents | TargetUserId | Users.Id | Soft link | J | Doelgebruiker van de gebeurtenis. |
5.8 Relatiebeheer als autorisatievoorwaarde
| Relatietype | Functioneel gevolg | Wordt verder gebruikt in |
|---|---|---|
Friendship | Maakt delen van afgeronde oefeningen tussen leerlingen mogelijk, mits delen is toegestaan. | Oefenruns/delen, privéberichten. |
TeacherStudent | Voorwaarde voor docent-leerlingcontext en niveauautorisaties. | Docentstructuur, geschiedenis, live meekijken. |
GuardianStudent | Voorwaarde voor ouder-/voogdinzage, resultaten, geschiedenis en live meekijken. | Ouder/voogdweergaven, oefenruns, live. |
TeacherTeacher | Voorwaarde voor samenwerking/collaborators op niveau-laag. | Docentstructuur en eigenaarschap. |
AdminAdmin | Systeemmatige beheerder-beheerdercontext. | Beheercommunicatie en beheercontext. |
5.9 Bewuste uitzonderingen en aandachtspunten
RelationshipTypes.CodeenRelationshipInvitations.Statuszijn functionele sleutelwaarden, geen FK naar aparte statustabellen.ToEmailis een logische koppelwaarde voor uitnodigingen naar nog onbekende accounts en heeft bewust geen FK.AdminAdmingebruikt 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
| Vervolg | Gebruik wanneer... |
|---|---|
| Identiteit en autorisatie | je rolcontexten of gebruikersbasis wilt controleren. |
| Docentstructuur en leerlingtoegang | je wilt weten hoe een docent-leerlingrelatie leidt tot niveauautorisatie. |
| Oefenruns, delen en voortgang | je wilt weten hoe vriendschappen delen van oefeningen mogelijk maken. |
| Communicatie en notificaties | je wilt weten hoe uitnodigingen of ontkoppelingen via systeemberichten zichtbaar worden. |