Skip to main content

3. Domeinkaart

Deze kaart verbindt het ERD-hoofdstuk aan de bestaande databasehoofdstukken. De aantallen zijn gebaseerd op de huidige Markdownstructuur en zijn bedoeld als oriëntatie, niet als formele telling voor implementatie.

ERD-paginaBrondocumentTabellenFK-velden
Identiteit en autorisatie01_identiteit-en-autorisatie.md57
Relatiebeheer02_relatiebeheer.md420
Docentstructuur en leerlingtoegang03_docentstructuur-en-leerlingtoegang.md1234
Communicatie en notificaties04_communicatie-en-notificaties.md511
Configuratie en contentbeheer05_configuratie-en-contentbeheer.md1734
Ticket- en meldingsbeheer06_ticket-en-meldingsbeheer.md1128
Oefenruns, delen en voortgang07_oefenruns-delen-en-voortgang.md313
Audit, historie en technische uitgangspunten08_audit-historie-en-technische-uitgangspunten.mdn.v.t.n.v.t.

3.1 Gebruik

  • Begin bij een domeinpagina wanneer je functioneel wilt begrijpen welke tabellen bij elkaar horen.
  • Gebruik de relatie-index wanneer je een specifieke FK of verwijzing wilt controleren.
  • Gebruik cross-domein relaties wanneer de vraag domeinen overstijgt, bijvoorbeeld Users, ExerciseRuns, SystemMessages, Tickets of configuratiebronnen zoals SystemMessageTemplates en SiteNotifications.

3.2 Startpunten per vraagtype

Ik zoek naar...Begin bijWaarom
Rollen, profiel, instellingen of Keycloak-koppelingIdentiteit en autorisatieUsers, Roles, UserRoles en UserSettings bepalen de basiscontext.
Vrienden, ouder-/voogdrelaties, docentrelaties of uitnodigingenRelatiebeheerUserRelationships en RelationshipInvitations zijn de bron voor formele koppelingen tussen accounts.
Niveaus, categorieën, oefeningen, modules of leerlingtoegangDocentstructuur en leerlingtoegangDit domein bepaalt de onderwijsstructuur waarbinnen oefenruns ontstaan.
Resultaten, voortgang, geschiedenis, PDF of gedeelde oefeningenOefenruns, delen en voortgangExerciseRuns is de historische bron; ExerciseRunProgress en SharedExercises vullen de details aan.
Systeemberichten, privéberichten, mailboxbadges of thread-eventsCommunicatie en notificatiesSystemMessages en privéthreads blijven gescheiden bronnen, maar worden gecombineerd in mailboxreadmodels.
Meldingen, oplossingen, heropenen, behandeling door beheer of doorzetten naar docentTicket- en meldingsbeheerTickets is het hoofdrecord; assignments, discussie, closures, reopen requests, snapshots en doorzetrecords vormen de lifecycle eromheen.
Beheerbare content, footer, popups, templates, features of sitebrede systeemnotificatiesConfiguratie en contentbeheerDit domein bevat beheerbare brondata voor pagina-inhoud, feedback, templates, overlays en sitebreed gedrag.
Audit, snapshots, JSON/base64 of bewuste niet-FK'sAudit, historie en technische uitgangspuntenDeze pagina verzamelt patroonkeuzes die in meerdere domeinen terugkomen.

3.3 Inzoomvolgorde

Voor review is deze volgorde meestal het meest logisch:

  1. Identiteit en autorisatie: wie bestaat er en welke rolcontexten zijn mogelijk?
  2. Relatiebeheer: welke gebruikers mogen functioneel iets met elkaar?
  3. Docentstructuur en leerlingtoegang: welke onderwijscontext en autorisaties bestaan er?
  4. Oefenruns, delen en voortgang: wat gebeurt er wanneer een leerling daadwerkelijk oefent?
  5. Communicatie en notificaties: hoe worden gebruikers geïnformeerd via systeemberichten, privéthreads, thread-events en badges?
  6. Ticket- en meldingsbeheer: hoe gebruiken meldingen dezelfde communicatiepatronen voor updates, discussie, sluiting, heropenen en doorzetten naar docent?
  7. Configuratie en contentbeheer: welke templates, popups, sitebrede notificaties, featuretoggles en beheerbare content ondersteunen de applicatie?
  8. Audit, historie en uitzonderingen: welke patronen gelden over alle domeinen heen?

Deze volgorde voorkomt dat je vanuit een resultaat, bericht, ticket of beheerwaarde naar een nog onbekende broncontext moet terugredeneren.

3.4 Communicatie versus configuratie

De naam Communicatie en notificaties kan verwarrend zijn omdat niet alle communicatie-gerelateerde tabellen in hetzelfde databasehoofdstuk staan. Gebruik daarom deze scheiding:

OnderdeelPrimair ERD-domeinWaarom
Mailbox-systeemberichtenCommunicatie en notificatiesRuntime berichten per ontvanger via SystemMessages.
PrivéberichtthreadsCommunicatie en notificatiesConversaties, deelnemers, berichten, readstate en thread-events.
SysteemberichttemplatesConfiguratie en contentbeheerBeheerbare sjablooninhoud; geen verzonden mailboxrecord.
Sitebrede systeemnotificatiesConfiguratie en contentbeheerFrontpage-overlay op basis van doelgroep, start/eindmoment en displayregel.
PopuptekstenConfiguratie en contentbeheerBeheerbare feedbacktekst; geen bericht en geen mailboxitem.

Voor review betekent dit: lees eerst de communicatiepagina voor runtime mailboxgedrag en lees daarna configuratie/contentbeheer wanneer je wilt begrijpen hoe templates, popups of sitebrede notificaties beheerd worden.

3.5 Verdiept startpunt voor tickets

Voor ticketvragen is het nuttig om niet alleen naar de FK's te kijken, maar eerst te bepalen welke laag je bedoelt.

VraagTicketlaagPrimaire tabel
Wat is de actuele status van de melding?Actuele toestandTickets
Wie behandelt of behandelde de melding?BehandelcontextTicketAssignments
Wat is inhoudelijk besproken?DiscussieTicketDiscussionMessages
Welke auditacties zijn uitgevoerd?Compacte auditTicketHistory
Wat was de formele oplossing of sluitreden?SluitbronTicketClosures
Waarom is de melding opnieuw geopend?HeropenbronTicketReopenRequests
Waarom is de melding naar een docent doorgezet?DoorzetregistratieTicketForwardedToTeacher
Welke technische context gold bij melden?SnapshotTicketTechnicalSnapshots

Deze laagindeling voorkomt dat discussie, audit, oplossingstekst en technische context in één onoverzichtelijk diagram worden samengevoegd.

3.6 Verdiept startpunt voor configuratie en contentbeheer

Voor configuratievragen is vooral belangrijk of je kijkt naar beheerbare brondata, history, of het runtime-effect van die brondata.

VraagConfiguratielaagPrimaire tabel(len)
Welke functies staan sitebreed aan of uit?FeaturebeschikbaarheidSiteFeatureToggles, SiteFeatureToggleHistory
Welke globale niet-booleaanse waarde gebruikt de applicatie?SysteeminstellingSystemSettings
Welke tekst staat op frontpages, vaste pagina's of in de footer?Beheerbare contentContentBlocks, ContentBlockHistory
Welke URL's en footerkolommen worden getoond?Footer en linksSiteLinks, FooterSections, FooterLinkAssignments
Welke popuptekst of knoplabels horen bij een bekende popupkey?PopupregisterPopupDetails, PopupDetailsHistory, PopupDetailsHistoryItems
Welke tekst gebruikt systeemcommunicatie als sjabloon?TemplatebeheerSystemMessageTemplates, SystemMessageTemplateHistory
Welke tijdelijke overlay moet na frontpageload verschijnen?Sitebrede notificatieSiteNotifications, SiteNotificationHistory
Wie heeft een beheerwaarde gewijzigd?History en actorcontextDe bijbehorende *History-tabel plus Users-actorvelden

Deze indeling voorkomt dat configuratiebronnen worden verward met runtime-objecten. Een template is geen bericht, een popupdefinitie is geen ticketfeedbackrecord, en een sitebrede notificatie is geen mailboxitem.

3.7 Verdiept startpunt voor audit, historie en technische uitgangspunten

De auditpagina is geen gewone tabelgroep, maar een controlelaag over alle eerdere domeinen. Start daar wanneer je twijfelt of een relatie hard, logisch, historisch of afgeleid is.

VraagAuditlaagVoorbeelden
Wie heeft iets gewijzigd?Actor-auditChangedByUserId, CreatedByUserId, ClosedByUserId
Welke wijzigingen zijn reconstructeerbaar?Append-only historyCategoryHistory, ExerciseHistory, RelationshipEvents, TicketHistory, *History-tabellen
Welke lifecycle-stap heeft een eigen bronrecord?Formele lifecycle-bronTicketClosures, TicketReopenRequests, TicketAssignments, TicketForwardedToTeacher
Welke waarde moet historisch leesbaar blijven?SnapshotViewerRoleNameSnapshot, technische ticketsnapshot, gedeelde-oefening-context
Welke verwijzing is bewust geen FK?Logische verwijzingSystemMessages.EntityType + EntityId, FeatureKey, SettingKey
Welke data blijft modulespecifiek?PayloadJSON/base64-configuratie en vraag-/antwoordpayloads
Welke waarde is alleen een overzicht?Readmodelbadges, frontpagetellers, ouder-/voogdresultaatreadmodels

3.8 Domeinen en relatiepatronen

Voor review is niet alleen het domein belangrijk, maar ook het type relatie dat je verwacht te vinden. Gebruik daarom deze snelle route:

Je zoekt naarGebruik eerstControleer daarna
Een harde FK tussen twee tabellenRelevante domeinpaginaRelatie-index
Een verwijzing vanuit een systeemberichtCommunicatie en notificatiesCross-domein relaties
Historische leesbaarheid na mutatieAudit, historie en technische uitgangspuntenRelevante domeinpagina
Resultaat- of geschiedenisbronOefenruns, delen en voortgangDocentstructuur en leerlingtoegang
Autorisatie of zichtbaarheidIdentiteit en autorisatie of RelatiebeheerDe functionele domeinpagina waar de actie plaatsvindt