Databaser har en masse jargon, og kardinalitet er et af de ord, som erfarne mennesker har en tendens til at glemme, at de ikke kendte engang. Men hvis du ikke kender det – og det tager et stykke tid at blive rigtig fortrolig med kardinalitet – er det super forvirrende, når DBA’en bare smider det ind midt i en sætning uden at sætte farten ned! Frygt ikke: Cardinality betyder to ting i databaser. Til vores formål betyder det ene meget mere end det andet. Lad os gøre det enkle først, og derefter grave i det, der har betydning for forespørgselsydelsen: Den definition af kardinalitet, der har stor betydning for forespørgselsydelsen, er datakardinalitet. Det handler om, hvor mange forskellige værdier der er i en kolonne.Den første betydning af kardinalitet er, når du designer databasen – det, der kaldes datamodellering. I denne betydning betyder kardinalitet, om en relation er en-til-en, mange-til-en eller mange-til-mange. Så du taler i virkeligheden om relationens kardinalitet. kardinalitetens officielle, ikke-databaseordbogdefinition er matematisk: antallet af værdier i et sæt. Når den anvendes på databaser, er betydningen en smule anderledes: det er antallet af forskellige værdier i en tabelkolonne i forhold til antallet af rækker i tabellen. Gentagne værdier i kolonnen tæller ikke med.Vi taler dog normalt ikke om kardinalitet som et tal. Det er mere almindeligt at tale om “høj” og “lav” kardinalitet. Mange forskellige værdier er høj kardinalitet; mange gentagne værdier er lav kardinalitet.Forestil dig en tabel med produktbeskrivelser i en e-handelsdatabase:Kolonnen ProductID
vil have høj kardinalitet, fordi den sandsynligvis er den primære nøgle i tabellen, så den er helt unik. Hvis der er tusind rækker i tabellen, vil der være tusind forskellige ProductID
-værdier. Kolonnen Category
vil have mange gentagelser, og den vil være af lav eller middelhøj kardinalitet: måske 50 eller 100 forskellige Category
-værdier. Name
er sandsynligvis høj kardinalitet, medmindre der er mere i denne tabel, end man umiddelbart kan se (f.eks. flere rækker for forskellige produktfarver og andre variationer).Kardinalitet har stor indflydelse på ydeevnen, fordi den påvirker forespørgselsudførelsesplanen. Planlæggeren undersøger kolonnestatistikker og bruger dem bl.a. til at finde ud af, hvor mange værdier en forespørgsel sandsynligvis skal matche. Afhængigt af hvad den finder, kan den bruge forskellige forespørgselsudførelsesplaner for at forsøge at opnå den bedste ydelse. Men det er et emne til et andet blogindlæg, for det kræver en del arbejde at forklare.Så næste gang nogen smider “høj kardinalitet” ind i en sætning uden at holde en pause, ved du, at de virkelig mener “mange forskellige værdier”. Og der har du det!