Skip to main content

8. Configuratie en contentbeheer

Deze pagina is de ERD-inzoomlaag voor het databasehoofdstuk 05_configuratie-en-contentbeheer.md. De tabeldefinities in dat brondocument blijven leidend; deze pagina biedt een leesbare visuele ingang en onderscheidt beheerbare brondata, history, codegedreven sleutelsets en runtime-effecten.

8.1 Doel van deze inzoomlaag

Configuratie en contentbeheer is geen éénvormig transactiedomein. Het bestaat uit meerdere beheerclusters die functioneel verschillende dingen sturen:

  • popupdefinities voor gebruikersfeedback;
  • featuretoggles en systeeminstellingen voor sitebreed gedrag;
  • contentblokken voor frontpages, vaste pagina's en footercontent;
  • links en footerplaatsingen voor beheerbare navigatiecontent;
  • systeemberichttemplates voor inhoud van codegedreven systeemcommunicatie;
  • sitebrede systeemnotificaties voor tijdelijke overlays na frontpageload;
  • historytabellen om beheerwijzigingen op veldniveau herleidbaar te houden.

De belangrijkste ontwerpkeuze is dat deze tabellen beheerbare configuratiebrondata zijn. Zij zijn meestal niet zelf het runtime-object dat een gebruiker ontvangt. Een SystemMessageTemplate is bijvoorbeeld geen mailboxbericht; een PopupDetails-record is geen ticket- of berichtrecord; en een SiteNotification is geen SystemMessage.

Onderstaand diagram toont de harde interne relaties voor beheerbare pagina- en feedbackcontent. Actorverwijzingen naar Users zijn hier bewust weggelaten; die staan in de actor- en auditcontext.

Deze drie clusters horen functioneel bij zichtbare content: popups, tekstblokken en footer-/linkplaatsingen. De splitsing voorkomt dat de bredere configuratietabellen het content-ERD onleesbaar maken.

8.3 Interne kern-ERD: templates, notificaties, features en instellingen

Dit tweede interne diagram toont de configuratiebronnen die runtimegedrag of communicatie-inhoud sturen. Ook hier blijven actorverwijzingen naar Users buiten beeld.

8.4 Beheerclusters

ClusterBrontabellenWaarvoor gebruiken?Belangrijkste aandachtspunt
PopupregisterPopupDetails, PopupDetailsHistory, PopupDetailsHistoryItemsBeheerbare tekst, knoplabels en beperkte inputdefinitie van bestaande popups.Nieuwe popupkeys en custom renderers blijven code/migratiegedreven.
Features en instellingenSiteFeatureToggles, SiteFeatureToggleHistory, SystemSettingsSitebrede aan/uit-schakelaars en niet-booleaanse systeemwaarden.Uitschakelen verwijdert geen domeindata; setting keys zijn vooraf bekend.
ContentblokkenContentBlocks, ContentBlockHistoryTekstuele inhoud voor frontpages, vaste pagina's en footertekst.Geen pagebuilder: layout, volgorde en rendering blijven codevast.
Footer en linksSiteLinks, SiteLinkHistory, FooterSections, FooterLinkAssignments, FooterLinkAssignmentHistoryHerbruikbare URLs, footersecties en linkplaatsing per context/kolom.URL-records mogen pas verwijderd worden wanneer zij nergens gebruikt worden.
SysteemberichttemplatesSystemMessageTemplates, SystemMessageTemplateHistoryBeheerbare inhoud van bestaande systeemcommunicatie.Template is geen verzonden bericht; verzending maakt runtime SystemMessages.
Sitebrede systeemnotificatiesSiteNotifications, SiteNotificationHistoryTijdelijke of geplande overlays voor een doelgroep na frontpageload.Geen mailboxbericht en geen popupregister-popup; displayregel bepaalt herhaling.

8.5 Actor- en auditcontext

Bijna alle beheerbare tabellen verwijzen naar Users voor aanmaak, laatste wijziging, verwijdering of history. Deze actorverwijzingen zijn soft links naar identiteit/autorisatie en worden daarom in compacte groepen getoond. Zij zijn geen harde database-FK’s.

8.5.1 Actorverwijzingen op contentrecords

8.5.2 Actorverwijzingen op runtimeconfiguratie

8.5.3 Actorverwijzingen op historyrecords

Lees deze diagrammen niet als eigenaarschap van content door gebruikers. Het zijn beheer- en auditverwijzingen als soft links: wie heeft een record aangemaakt, gewijzigd, verwijderd of als historyregel vastgelegd. De geldigheid wordt via applicatielogica en autorisatie gecontroleerd, niet via een harde database-FK naar identity.

8.6 Functionele runtime-effecten

Configuratie/contentbeheer beïnvloedt andere domeinen, maar doet dat meestal via applicatielogica en niet via harde FK's. Daarom is een flowchart hier duidelijker dan een puur ERD.

Belangrijk in dit patroon:

  • SystemMessageTemplates leveren inhoud voor toekomstige systeemcommunicatie, maar verwijzen niet hard naar individuele SystemMessages.
  • SiteFeatureToggles kunnen flows blokkeren of beschikbaar maken, maar zijn geen autorisatiebron en wijzigen geen bestaande domeindata.
  • PopupDetails leveren gebruikersfeedback voor veel domeinen, maar maken geen ticket, bericht of auditrecord aan.
  • SiteNotifications zijn eigen frontpage-overlays. Zij zijn niet hetzelfde als mailbox-systeemberichten en ook niet hetzelfde als popupregister-popups.
  • ContentBlocks en footerrecords leveren tekstuele renderbrondata; zij bepalen geen routeautorisatie.

8.7 Lifecycle: contentblok wijzigen

Contentblokken vormen een uniform tekstueel beheermodel, maar geen vrije pagebuilder. DomainType, ContextType en BlockKey zijn stabiele ankers waarmee code bepaalt waar de tekst terechtkomt.

Een SiteLinks-record is herbruikbaar. De plaatsing in de footer ontstaat pas via FooterLinkAssignments. Daardoor kan dezelfde URL in meerdere contexten of kolommen voorkomen zonder de URL zelf te dupliceren.

8.9 Lifecycle: systeemnotificatie tonen

SiteNotifications worden op database- en backendniveau in UTC gepland. Beheerlabels zoals actief, gepland, bijna verlopen en verlopen zijn afgeleide UI-statussen en geen zelfstandige databasewaarheid.

8.10 Lifecycle: featuretoggle of systeeminstelling wijzigen

Featuretoggles zijn bedoeld voor expliciet schakelbare functies. Verplichte kernfunctionaliteit hoort niet als toggle in deze tabel. SystemSettings is bedoeld voor bekende niet-booleaanse instellingen, waarbij per SettingKey in code bekend is welk waardeveld leidend is.

8.11 Systeemberichttemplates versus runtime systeemberichten

De scheiding tussen templates en verzonden berichten is belangrijk genoeg om apart te tekenen.

Een templatewijziging herschrijft bestaande verzonden systeemberichten niet. Nieuwe systeemcommunicatie kan de actuele template gebruiken, maar het mailboxitem zelf hoort bij het communicatiedomein.

8.12 Tabellen in dit domein

TabelCategorieDoel / verantwoordelijkheid
PopupDetailsConfiguratie - Systeem PopupsBevat configureerbare popupdefinities die door beheerders via de GUI aangepast kunnen worden. Nieuwe popups worden uitsluitend via code en database-migraties toegevoegd.
PopupDetailsHistoryConfiguratie - Systeem PopupsRegistreert wijzigingsmomenten op popupniveau, inclusief actor, tijdstip en type wijziging.
PopupDetailsHistoryItemsConfiguratie - Systeem PopupsLegt per historymoment vast welke velden van een popup gewijzigd zijn en wat de oude en nieuwe waarde was.
SiteFeatureTogglesConfiguratieSitebrede feature toggles die door beheerders via site-instellingen aan- of uitgezet kunnen worden.
SystemSettingsConfiguratieNiet-booleaanse systeembrede instellingen die door beheerders via site-instellingen beheerd worden.
ContentBlocksConfiguratie en contentbeheerUniform contentblokmodel voor frontpagecontent, vaste pagina-inhoud en tekstuele footerinhoud.
ContentBlockHistoryAudit en historieVeldniveau-history voor contentblokken.
SiteLinksConfiguratie en contentbeheerHerbruikbare URL-records voor footerlinks en andere beheerde linkverwijzingen.
SiteLinkHistoryAudit en historieVeldniveau-history voor URL-records.
FooterSectionsConfiguratie en contentbeheerBeheerbare secties binnen de footer per context en kolom.
FooterLinkAssignmentsConfiguratie en contentbeheerKoppelt SiteLinks aan een beheerbare footersectie en legt de volgorde vast.
FooterLinkAssignmentHistoryAudit en historieVeldniveau-history voor footerlinkplaatsingen en volgordewijzigingen.
SystemMessageTemplatesConfiguratie en contentbeheerCodegedreven systeemberichtsjablonen waarvan inhoud en beperkte metadata via de GUI aangepast mogen worden.
SystemMessageTemplateHistoryAudit en historieVeldniveau-history van systeemberichtsjablonen.
SiteNotificationsConfiguratie en contentbeheerBeheerder-gedreven, planbare en tijdelijke sitebrede of doelgroepgerichte notificaties.
SiteNotificationHistoryAudit en historieVeldniveau-history voor systeemnotificaties, inclusief inhoud, planning, doelgroep en weergaveregel.
SiteFeatureToggleHistoryAudit en historieHistorische vastlegging van alle wijzigingen aan sitebrede featuretoggles.

8.13 Relatie-inventaris binnen dit domein

BrontabelVeldVerwijst naarNullableRelatietype
PopupDetailsUpdatedByUserIdUsers.IdJSoft link
PopupDetailsHistoryPopupDetailsIdPopupDetails.IdNHarde FK
PopupDetailsHistoryChangedByUserIdUsers.IdNSoft link
PopupDetailsHistoryItemsPopupDetailsHistoryIdPopupDetailsHistory.IdNHarde FK
SiteFeatureTogglesUpdatedByUserIdUsers.IdJSoft link
SystemSettingsUpdatedByUserIdUsers.IdJSoft link
ContentBlocksCreatedByUserIdUsers.IdNSoft link
ContentBlocksUpdatedByUserIdUsers.IdJSoft link
ContentBlockHistoryContentBlockIdContentBlocks.IdNHarde FK
ContentBlockHistoryChangedByUserIdUsers.IdNSoft link
SiteLinksCreatedByUserIdUsers.IdNSoft link
SiteLinksUpdatedByUserIdUsers.IdJSoft link
SiteLinksDeletedByUserIdUsers.IdJSoft link
SiteLinkHistorySiteLinkIdSiteLinks.IdNHarde FK
SiteLinkHistoryChangedByUserIdUsers.IdNSoft link
FooterSectionsCreatedByUserIdUsers.IdNSoft link
FooterSectionsUpdatedByUserIdUsers.IdJSoft link
FooterSectionsDeletedByUserIdUsers.IdJSoft link
FooterLinkAssignmentsFooterSectionIdFooterSections.IdNHarde FK
FooterLinkAssignmentsSiteLinkIdSiteLinks.IdNHarde FK
FooterLinkAssignmentsCreatedByUserIdUsers.IdNSoft link
FooterLinkAssignmentsUpdatedByUserIdUsers.IdJSoft link
FooterLinkAssignmentsDeletedByUserIdUsers.IdJSoft link
FooterLinkAssignmentHistoryFooterLinkAssignmentIdFooterLinkAssignments.IdNHarde FK
FooterLinkAssignmentHistoryChangedByUserIdUsers.IdNSoft link
SystemMessageTemplatesUpdatedByUserIdUsers.IdJSoft link
SystemMessageTemplateHistorySystemMessageTemplateIdSystemMessageTemplates.IdNHarde FK
SystemMessageTemplateHistoryChangedByUserIdUsers.IdNSoft link
SiteNotificationsCreatedByUserIdUsers.IdNSoft link
SiteNotificationsUpdatedByUserIdUsers.IdJSoft link
SiteNotificationHistorySiteNotificationIdSiteNotifications.IdNHarde FK
SiteNotificationHistoryChangedByUserIdUsers.IdNSoft link
SiteFeatureToggleHistorySiteFeatureToggleIdSiteFeatureToggles.IdNHarde FK
SiteFeatureToggleHistoryChangedByUserIdUsers.IdNSoft link

8.14 Bewuste niet-FK's en sleutelsets

In dit domein komen veel velden voor die als code-, enum- of sleutelwaarde functioneren, maar bewust geen harde FK zijn:

VeldtypeVoorbeeldenWaarom geen harde FK?
Technische sleutelsPopupDetails.Key, FeatureKey, SettingKey, BlockKey, TemplateKeyDe toegestane set wordt door code/migratie beheerst en moet niet vrij via relationele beheertabellen ontstaan.
Context- en domeintypenDomainType, ContextType, AudienceType, FooterColumnTypeDit zijn gesloten functionele sleutelsets die rendering en doelgroep bepalen.
Weergave- en variantwaardenPopupType, PopupVariant, ButtonTheme, NotificationType, DisplayRule, LinkTypeDe waarden sturen UI- en applicatiegedrag; een FK-tabel zou hier vooral extra beheercomplexiteit toevoegen.
Actie- of rendererreferentiesLeftButtonActionCallMethod, RightButtonActionCallMethod, CustomRendererKeyDe daadwerkelijke actie of renderer bestaat in code en kan niet veilig als vrije databaseconfiguratie worden behandeld.

De ERD-pagina tekent deze velden daarom niet als relaties. Zij horen wel expliciet in de database-informatie en in de SRS-validaties thuis.

8.15 Inzoomadvies

Voor review is deze volgorde het meest praktisch:

  1. Begin met SiteFeatureToggles en SystemSettings wanneer je wilt begrijpen welke functies of globale waarden het gedrag beïnvloeden.
  2. Bekijk ContentBlocks, SiteLinks, FooterSections en FooterLinkAssignments wanneer het gaat om beheerbare pagina- of footerinhoud.
  3. Gebruik PopupDetails en SystemMessageTemplates voor gebruikersfeedback en systeemcommunicatie-inhoud.
  4. Gebruik SiteNotifications wanneer het gaat om tijdelijke frontpage-overlays.
  5. Controleer de bijbehorende historytabellen wanneer de vraag is wie iets gewijzigd heeft en welke waarde van/naar is gegaan.

8.16 Afgedichte keuzes en onderhoud

OnderwerpV1.0-keuzeBron / vervolgcontrole
SystemSettings-historyGeen eigen historytabel in de V1.0-baseline. UpdatedAtUtc en UpdatedByUserId zijn voldoende voor de actuele waarde; relevante beheerwijzigingen kunnen via beheerlogging/technische logging worden herleid.Heropenen wanneer juridische audit, beheerhistorie of supportanalyse een volledige oude/nieuwe waardehistorie vereist.
SettingKey naar Value*De initiële sleutelcatalogus staat in configuratie en contentbeheer. Per key is één waardeveld leidend.Nieuwe keys ontstaan via code en migratie.
Popup-, template- en notificatieplaceholdersStabiele keys en placeholders zijn seeddata-/codegedreven. Beheer wijzigt inhoud, niet de technische sleutelset.Nieuwe placeholders vereisen code-/migratie-impactcontrole.
URL-validatieOpslaan wordt synchroon geblokkeerd wanneer de interne route of externe URL ongeldig is. Er komt geen aparte validatiestatus in de V1.0-baseline.Alleen heroverwegen wanneer externe URL-controle asynchroon of periodiek gemaakt wordt.
Overkoepelende historypresentatieDit is afgedicht via audit, historie en technische uitgangspunten.Nieuwe historytabellen volgen hetzelfde patroon.

Deze punten zijn daarmee geen open ERD-blokkers meer. Zij blijven normale onderhoudscontroles wanneer configuratie-, content- of seeddata-eisen wijzigen.