Den gode database

Den gode database

1. Formål og anvendelsesområde

Denne side beskriver obligatoriske principper for modellering og strukturering af databaser i STAR City.

Retningslinjerne gælder for:

  • Nye forretningsdomæner

  • Nye tabeller i eksisterende forretningsdomæner

  • Omlægning af eksisterende datamodeller

Formålet er at sikre:

  • Entydig identifikation af forretningsobjekter

  • Konsistent historik og revisionsspor

  • Klar adskillelse mellem tekniske og forretningsmæssige nøgler

  • Ensartet praksis på tværs af udviklingsteams


2. Overordnet datamodelleringsprincip

Gældende dokumentation for metadata og historik findes i:

Denne side beskriver de databaserelaterede principper, som skal anvendes i STAR City.


3. Fact- og Historik-tabeller

3.1 Grundprincip

Alle forretningsdata, der indgår i sagsbehandling, skal kunne rekonstrueres historisk.

Der arbejdes med to typer tabeller:

  1. Fact-tabeller

  2. Historik-tabeller (navngives: <FactTabelNavn>History)

For hver Fact-tabel skal der oprettes en tilhørende Historik-tabel.


3.2 Fact-tabellen

Fact-tabellen indeholder:

  • Den aktuelle (gældende) version af entiteten

  • Den tekniske primærnøgle (int)

  • Forretningsmæssig identifikation (ExternalIdentifier)

  • Aktuel versionsidentifikation (ExternalVersionIdentifier)

  • Obligatoriske metadatafelter jf. Star.Foundation

Fact-tabellen indeholder altid den seneste gældende version.

Ved sletning fjernes rækken fra Fact-tabellen.

En Fact-tabel kan indeholde flere forekomster for samme borger (PersonId), fx flere kontaktgruppeforløb.


3.3 Historik-tabellen

Historik-tabellen indeholder:

  • Alle tidligere versioner

  • Indsættelser, opdateringer og sletninger

  • Samme datamodel som Fact-tabellen

  • Metadata inkl. operationstype

Hver ændring skal resultere i:

  • Opdatering af Fact-tabellen

  • Indsættelse af ny række i Historik-tabellen

Read-operationer logges ikke i revisionshistorikken, men i systemlog jf. gældende logningsprincipper.

Metadatafelter beskrives centralt i: https://starwiki.atlassian.net/wiki/spaces/CITY/pages/1654718588


4. ID-strategi (obligatorisk)

Dette er en normativ og gældende standard for STAR City.

4.1 Tekniske nøgler

  • Primærnøgler i databasen skal være interne integers

  • Fremmednøgler skal være interne integers

  • Interne nøgler må aldrig eksponeres via API’er


4.2 Forretningsmæssig identifikation

Hver forretningsentitet skal have:

ExternalIdentifier (GUID)

  • Er entitetens forretningsmæssige unikke nøgle

  • Er immutable

  • Er globalt unik

  • Eksponeres i API’er

  • Anvendes REST-mæssigt til at pege på en entydig entitet

ExternalIdentifier ændres aldrig i entitetens levetid.


ExternalVersionIdentifier (GUID)

  • Identificerer en konkret version af entiteten

  • Genereres ved enhver ændring

  • Opdateres ved:

    • Create

    • Update

    • Forretningsmæssig korrektion

  • Eksponeres efter behov (fx ved historiske opslag)

ExternalVersionIdentifier muliggør opslag på:

“Hvordan så entiteten ud på et givent tidspunkt?”


4.3 Sammenhæng mellem nøgler

Type

Anvendelse

Type

Anvendelse

int PK

Teknisk relationel integritet

ExternalIdentifier

Forretningsmæssig identifikation

ExternalVersionIdentifier

Versionsidentifikation

Denne adskillelse er obligatorisk og må ikke fraviges.


5. Persondata og identifikation af borgere

CPR-nummer må ikke anvendes som primær identifikation i databaser.

5.1 PersonId (obligatorisk)

PersonId er den eneste tilladte tekniske identifikation af en borger i databasen.

Brugen af PersonId er ikke valgfri.

Følgende gælder:

  • PersonId skal anvendes i alle tabeller, hvor der refereres til en borger.

  • PersonId skal anvendes som foreign key ved relation til borger.

  • CPR-nummer må ikke anvendes som nøgle eller reference i nye tabeller.

  • CPR må kun anvendes som oplysning, hvor det er forretningsmæssigt nødvendigt og reguleret.

Hvert forretningsdomæne har et PersonId, som entydigt peger på en borger inden for domænet.

PersonId:

  • Er stabilt inden for domænet

  • Er uafhængigt af CPR-nummer

  • Ændres ikke ved CPR-skift

  • Må ikke eksponeres ukontrolleret


5.2 Eksisterende tabeller

Eksisterende tabeller med CPR-nummer skal ved ændringer eller videreudvikling omlægges til PersonId.

Der må ikke oprettes nye løsninger, der baserer relationer på CPR-nummer.


6. Navngivning

6.1 Tabeller

  • Engelske navne

  • CamelCase

  • Placering i korrekt schema iht. byggeblok/domæne

  • Historiktabeller navngives: <FactNavn>History

6.2 Kolonner

  • Følger domænemodellens attributter

  • Engelske navne

  • CamelCase

  • Metadatafelter følger Star.Foundation standard


7. Index-principper

7.1 Clustered index

  • Alle tabeller skal have et clustered index

  • Heaps må ikke anvendes, medmindre der foreligger særlig begrundelse


7.2 Foreign keys

  • Foreign keys skal som udgangspunkt have index

  • Undtagelse: reference til små kodelistetabeller

Vurdering skal baseres på:

  • Forventet datamængde

  • Query-mønstre

  • Performanceanalyse


7.3 Script til udtræk af foreign keys uden indexes og index kandidater

For at sikre korrekt og konsistent indeksering skal følgende anvendes:

  • Der skal foretages systematisk kontrol af foreign keys uden tilhørende index.

  • Der skal foretages analyse af potentielle indexkandidater baseret på SQL Servers indbyggede statistik.

Til dette formål skal det fælles STAR-script anvendes:

Scriptet identificerer:

  • Foreign keys uden tilhørende index

  • Potentielle indexkandidater baseret på brugeradfærd og query-omkostninger

Ved vurdering af foreslåede indexkandidater skal der særligt ses på:

  • AvgUserImpact

  • AvgTotalUserCost

  • IndexAdvantage

Det er ikke et krav, at alle foreslåede indexkandidater implementeres.
Der skal foretages en konkret arkitekturmæssig vurdering baseret på:

  • Datamængde

  • Query-mønstre

  • Samlet performancepåvirkning

Foreign keys til små kodelistetabeller skal som udgangspunkt ikke indekseres.


8. Mange-til-mange relationer

Relationstabeller skal:

  • Kun indeholde de to foreign keys

  • Have composite primary key bestående af disse

  • Ikke have egen surrogate key

Der må ikke genereres unødvendige entiteter i domænemodellen.


9. Dokumentation

Alle tabeller og kolonner skal dokumenteres via:

  • Extended Properties (MS_Description)

Databasemodellen skal versionsstyres på linje med applikationskode.


10. Query Store

SQL Server Query Store skal være aktiveret på alle databaser i STAR City.

Formål:

  • Overvågning af performance

  • Identifikation af regressionsproblemer

  • Analyse af eksekveringsplaner

image-20250522-130836.png