FAQ |
Kalender |
|
![]() |
#1 | ||
|
|||
Klarade millennium-buggen
|
Citat:
Det finns en vettig standard för hur breda adressfält bör vara som bland annat skatteverket använder och som är på 36 tecken för både förnamn och efternamn tillsammans. Samma längd gäller då för själva raden med gatuadress. Postnr och ort inkl landskod har också maxlängden 36 tecken. Detta gäller alltså när man skriver ut adressen för exempelvis utskick. Det är sällan meningsfullt att lagra överdrivet många tecken för atomära columner, då bör man kanske fundera en gång till på att dela upp det i fler columner elelr kanske till och med bryta ut till egen tabell. Ett exempel: Kalle Pettersson (max 36 tecken) c/o Lena Svensson (max 36 tecken) Kallhamrastigen 345 (max 36 tecken) SE-123 45 FARSTA (max 36 tecken) När man delar upp dessa i mindre komponenter i databasen så informationen blir atomär så brukar man regelmässigt använda 25 tecken för förnamn, efternamn samt ort. Postnr brukar man använda 10 tecken (brittiska postnr kan vara långa). Det finns även de som delar upp gatuadressen så själva gatunamnet är för sig och nummret är för sig. Ytterligare finfördelning förekommer där antal trappor anges eller om det är ö.g. (dvs över gården). Själv brukar jag lägga förnamn (varchar(25)), efternamn (varchar(25)), coadress (varchar(36)), gatuadress inkl gatunummer (varchar(36)), landskoden (varchar(2)), postnr (varchar(10)), ort (varchar(25)) i egna kolumner. Land (varchar 36) kan man med fördel lägga i en egen tabell där landskoden är PK. Det förekommer att man lägger Land i samma tabell som adressen men man drabbas då av mycket onödig redundans. Jag har arbetat med applikationer där man gått längre i sin normalisering till atomära värden. Landskoden kan man hämta på Tullverkets webbplats för att få alla 2 ställiga landskoder som använd vid postbefordran. När man har med större företag att göra som kunder så kan de kräva att man skiljer på Beställare, leveransmottagare, fakturamottagare och ibland även betalaren som alla kan ha helt olika adresser. Som leverantör till dessa kunder måste man kunna hantera dessa olika adresser annars får man inte betalt (om du skickar fakturan till fel mottatgare, eller leveransen till factoringfirman exempelvis). Ju mer atomärt man lagrar sina data desto lättare har man att göra anpassningar, utbyggnad och nya lösningar som man inte tänkt på när man började bygga sytemet. Man har dessutom lättare att integrera med externa system om man följer folkbokföringsregistrets och postens normalisering av adressdata. Ovanstående är en väl vedertagen konvention (som det finns varianter av) men om man skulel göra en fullständig normalisering enligt tredje normalformen skulle man bryta ut alla förnamn respektive efternamn i egna tabeller och bygga upp "person"-tabellen med en PK som är personnr och en länktabell med namn i en med status för namn om det är tilltalsnamn, men det har man oftast kompromissat bort för att förenkla användningen för programmeraren. Så förnamn och efternamn är i högsta grad redundanta i de flesta databaser. Men man får göra en del genomtänkta kompromisser vid modelleringen. Adress har jag dock sett allt oftare förekommer i en egen tabell. Just eftersom samma företag eller privatperson har ett antal olika adresser som man behövr hålla koll på, men det beror på hur databasen ska användas hur man väljer att lösa detta. Senast redigerad av Conny Westh den 2010-06-13 klockan 14:24 |
||
![]() |
![]() |
![]() |
#2 | ||
|
|||
Administratör
|
Citat:
Kan hålla med om de allra flesta av dina punkter för övrigt. Och en eloge ska du ha för energin att förklara både tydligt och utförligt. Gällande namngivningskonventioner för databaser tog jag mig friheten att söka på de vanliga nämda rekommendationerna beroende på databassystem, så att det inte bara var min egen erfarenhet som är färgad av mina typer av projekt. Min uppfattning av resultatet var att inom Oracle och MySQL rådde i stort sätt konsensus om namngivning med ett case (upper/lower varierade) och underscore mellan ord. Inom T-SQL-lägret tyckte jag däremot att det var lite mer splittrat med för mig förvånande många (men ingen majoritet, tror jag inte) som förordade CamelCase och lowerCamelCase. För MySQL kan man nästan säga att underscore-namngivningen är helt standard då både en helt dominerande del av användare och den medföljande information_schema-databasen följer den. |
||
![]() |
![]() |
Svara |
|
|