09. september 2006 - 22:20Der er
6 kommentarer og 1 løsning
Membership framework og primary key
Hej,
Kan nogen forklare mig hvorfor MS har valgt at benytte en primary key for en user på formen guid (304919f8-c551-4e8e-b950-3c4de90e45ef) i stedet for en almindelig auto increment integer?
Jeg har meget svært ved at se hvad fordelen er. Det må da være bedre performance mæssigt med en Integer? Og når man skal bruge den som fremmednøgle bliver det da også grimt - eller bør man bruger username som fremmednøgle?
Well.... hvis du har to databaser der indskrives brugere i, og du ønsker at synkronisere dem - kan det blive vanskeligt hvis din nøgle er en autoinkrementerende integer. så vil du jo have brugere med samme unikke nøgle, men som ikke er samme bruger. Guid's er da en vældig smart måde at fikse det på... Hvorfor synes du det er grimt? Og hvad ville du bruge som alternativ til at fikse "uniquenes" på dine nøgler? Mvh
Det synes jeg ikke er så kønt :) Og det fylder vel også en del ekstra MB i databasen at slæbe rundt på den store guid som fremmednøgle.
Uniquenes er vel ikke noget prob. med autoincrement integer undtagen hvis man skal slå databaser sammen selvfølgelig (har jeg aldrig været ude for at skulle).
Well... troede det var ud fra en softwaredesign praksis du ikke synes det var kønt. Jeg kan godt forstå at du ikke bryder dig om udseendet af linket.
Men.... hvorfor vil du overhovedet kalde dine sider med en oplysning om brugeren? Frameworket fikser dig programmatisk adgang til den slags info.
Nu er den løsning der er leveret af MS jo tænkt som værende generel, så jeg synes det er glimrende at der er taget højde for at man kunne få lyst til at merge databaser - specielt når man nu pr. default får en pr. site man opretter.
Generelt synes jeg det er hensigtsmæssigt at du kan betragte en bruger som unik - hvilket snildt gøres med en guid. Det er jo ikke kun i forbindelse med direkte sammenlægning af databaser det er interessant med en unik identifikation. Det kunne også bare være udveksling af brugere fra ét system til et andet. Eller måske løsninger hvor du kan arbejde både online og offline.
Jeg mener en guid fylder 16 bytes i databasen mod 4 for en integer, så det bliver næppe det der tvinger din database i knæ.
Hvis flere brugere har samme navn vil det bestemt give problemer, hvis du bruger det som nøgle. En GUID er ganske rigtig genereret, og der er deraf en sansynlighed for, at der vil kunne genereres dubletter - den er dog meget lille (der benyttes bl.a. oplysninger fra den fysiske pc til genereringen - f.eks. din mac-adresse på netkortet, serienummer på din bios ol). Mht. til performance, såh... well... hvis du har behov for guid's må de jo koste det det koster. Det er ikke noget jeg har testet på selv, men det forlyder at guids performer bedre end numeriske værdier når du kommer på den anden side af 100.000 rækker og bruger en sql server. Måske du kan google noget op omkring det. Mvh
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.