Avatar billede omansf Nybegynder
20. oktober 2004 - 10:32 Der er 5 kommentarer

Anvendelse af tekst som primærnøgle

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.
Avatar billede arne_v Ekspert
20. oktober 2004 - 10:38 #1
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.

Men jeg er også pragmatiker.
Avatar billede veronica Nybegynder
20. oktober 2004 - 12:05 #2
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).
Avatar billede aaberg Nybegynder
21. oktober 2004 - 09:38 #3
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.
Avatar billede trer Nybegynder
04. november 2004 - 10:38 #4
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.
Avatar billede arne_v Ekspert
06. november 2004 - 18:18 #5
omansf>

Tid at få afsluttet spørgsmålet ?

(bed evt. dem der har hjulpet dig ligge et svar så du kan give point)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester