Hej er der nogen der har en teoretisk begrundet forklaring på hvorfor det ikke er godt at anvende en streng som primærnøgle? Jeg har en tabel med en røvfuld lufthavne der alle har en iata kode bygget op af tre karakterer fra A-Z. Derfor er jeg interesseret i at vide om det kan svare sig at anvende et autogenereret id i stedet for denne iata kode. Min baggrund for at anvende strenge er at jeg ikke ønsker at have en int id på mine objekter.
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
Streng sammenligninger er dyrere end tal sammenligninger.
Visse database teoretikere kan slet ikke lide primærnøgler med betydning og vil derfor altid have en genereret id for at få en primærnøgle uden betydning.
Jeg kan ikke se noget problem ved at bruge anerkendte 3 bogstavs koder for lufthavne som primær nøgle.
Som arne_v skriver, bør man altid anvende en primærnøgle uden betydning - til dette er det ofte nemmest at bruge en integer/tæller.
Grunden til, at man normalt bruger en primærnøgle uden betydning er, at man eller skal være helt-helt-helt sikker på, at der aldrig-aldrig-aldrig vil forekomme dubletter, og at de aldrig-aldrig vil ændre sig. Ofte har man overset en detalje - og det kan være et stort arbejde at skulle til at omstrukturere sine tabeller, fordi man ikke gad have en ekstra int-kolonne i hver tabel.
I dit tilfælde vil jeg dog mene, at din lufthavnskode falder ind under de primærnøgler, som er OK at bruge. Lufthavnskoder er jo en international standard - og jeg er overbevist om, at dit system ikke er det første, der går ud fra, at de er unikke og uforanderlige.
Men du skal være klar over, at hvis en lufthavn skulle ændre kode - eller hvis en lufthavn ikke følger standarden (vel ikke sandsynligt?), skal du muligvis ind i mange tabeller og rette hver eneste henvisning (fremmednøgle).
I MS SQL Server kan man sætte tabellerne til at lave kaskadevis opdatering. Hvis du ændre en primærnøgle, vil SQL serveren automatisk ændre alle fremmednøgler med tilknytning til primærnøglen. Hvis du gør dette, får du ingen problemer hvis lufthavnen skifter nummer.
Dette kræver dog at du har lavet dine tabel relationer rigtigt.
Som jeg husker det er der det lille problem at de 3 bogstavs IATA koder faktisk ikke er fuldt unikke. Der er dubletter i flere lande (på små (private?) lufthavne). Du skal svjh op i de specielle firbogstavskoder for at få alle lufthavne med.
(bed evt. dem der har hjulpet dig ligge et svar så du kan give point)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.