Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Artiklar / Titel på artikeln

Normalisering, vad är det?

Postad 2002-07-28 av Jonas Gauffin i sektionen ASP.NET, C#, Okategoriserat med 0 Kommentarer | Läst av: 10588, Betyg: 61%

Förord

En annorlunda guide till normalisering av databaser.
Innehåll
  » Varför ska vi ha normalisering? Är det inte bättre att vara an
  » Regler, regler regler....
  » Alla vill vi vara lika, eller?
  » Löneförhöjning för vissa, men inte andra.
  » Verkställ! sa fänriken
  » Vad hände?
  » Bort med dubletter
  » Är det något kvar?
  » Vad hände sen?

Mr D. Normal Atabase


Till att börja med måste jag tala om att jag är tekniker, inte lärarnisse. Därför kan denna artikel, som för övrigt är min första, vara något krystad och rakt på sak.


Varför ska vi ha normalisering? Är det inte bättre att vara annorlunda?

Normalisering finns i 4 steg, 1NF, 2NF, 3NF och 4NF. Vad kan då NF stå för? ska vi slå till med en vild gissning? Vad sägs om Normal Form? Jäss, helt rätt. 4NF anses något extrem och används sällan, därför tänker jag inte ta upp den. (Ingen annan gör det heller).


Regler, regler regler....

Den första normaliseringsregeln (1NF) säger att:
- Det får inte finnas några dublettkolumner, dessa ska brytas ut till egna tabeller.
- Varje tabell ska ha en unik nyckel som består av en/flera kolumner.

Den andra normaliseringsregeln (2NF) säger att:
- Det ska inte finnas något data som upprepas på flera rader, dessa ska brytas ut och placeras i egna tabeller (med primärnyckel)

Den tredje normaliseringsregeln (3NF) säger att:
- En tabell ska endast innehålla data som är beroende av primärnyckeln.


Alla vill vi vara lika, eller?

Vi har ett företag där alla är likadana, alla heter samma sak, har samma lön och jobbar på samma kontor.

Vi har de anställda i en tabell:





































NamnPosition1Position2AvdelningLonKontorKontorsNummer
Sven SvenssonProgrammerareGossegrisUtveckling23000Avesta0226-222 22
Sven SvenssonProgrammerareGossegrisUtveckling23000Avesta0226-222 22
Sven SvenssonProgrammerareGossegrisUtveckling23000Avesta0226-222 22



Löneförhöjning för vissa, men inte andra.

Men oj? Nu vill Farbor Albert(chefen) höja lönen för Sven Svensson #2, men hur ska han göra det? Med en updatesats ändras allas löner och då blir Farbor Albert fattig. Jo, han börjar med första regeln och lägger till en primärnyckel:





AnstallningsIDNamnPosition1Position2AvdelningLonKontorKontorsNummer
1Sven SvenssonProgrammerareGossegrisUtveckling23000Avesta0226-222 22
2Sven SvenssonProgrammerareGossegrisUtveckling23000Avesta0226-222 22
3Sven SvenssonProgrammerareGossegrisUtveckling23000Avesta0226-222 22


Oj. Nu kan han höja lönen, fast nu har han bestämt sig för att fortsätta normalisera databasen. Vad vare det mer som 1NF sa? Jo att det inte får finnas några duplettkolumner. Postition1 och Position2 har samma innebörd och är därför dublettkolumner. Vi skapar en ny tabell för dom samt en relationstabell, en sk junction table.

Anstallda:

































AnstallningsIDNamnAvdelningLonKontorKontorsNummer
1Sven SvenssonUtveckling23000Avesta0226-222 22
2Sven SvenssonUtveckling23000Avesta0226-222 22
3Sven SvenssonUtveckling23000Avesta0226-222 22


Position:













PositionsIDPosition
1Programmerare
2Gossegris


AnstallningsPosition:





























PositionsIDAnstallningsID
11
21
12
22
13
23



Verkställ! sa fänriken

Sådär. Nu höjer Farbror Albert lönen för Sven #1. Efterom Albert har bråkat med Sven #2 vill han inte att Sven #2 ska vara gossegris mer. SQL satserna som han använder ser ut så här:


UPDATE anstallda SET lon = 33000 WHERE AnstallningsID=1
DELETE FROM AnstallningsPosition WHERE positionsid=2 AND anstallningsid=2


Jag föredrar att skriva alla SQL ord med stora bokstäver och tabellinnehållet med små för att göra det lättare att läsa SQL satserna.


Vad hände?

Stackars Farbror Albert är glömsk och har glömt vad han gjort. Därför vill han lista alla anställda och vad de gör för någonting:


SELECT a.anstallningsid, namn, lon, position
FROM anstallda a, position p, anstallningsposition ap
WHERE ap.anstallningsid=a.anstallningsid
AND p.positionsid=ap.positionsid


Resultatet:





































AnstallningsIDNamnLonPosition
1Sven Svensson33000Programmerare
1Sven Svensson33000Gossegris
2Sven Svensson23000Programmerare
3Sven Svensson23000Programmerare
3Sven Svensson23000Gossegris


Nu blev han glad igen, att vara chef kan vara jobbigt ibland. Men eftersom han är på bra humör fortsätter han med normaliseringen.


Bort med dubletter

Nästa steg är andra regeln. Den säger att det får inte finnas något data som upprepas på flera rader. Därför skapar vi en ny tabell, kontor och stoppar in kontorsnummer och namn i den, och så skapar vi en tabell för Avdelningen.

Anstallda:





























AnstallningsIDNamnAvdelningsIDLonKontorsID
1Sven Svensson1230001
2Sven Svensson1230001
3Sven Svensson1230001

Position:













PositionsIDPosition
1Programmerare
2Gossegris


AnstallningsPosition:





























PositionsIDAnstallningsID
11
21
12
22
13
23


Kontor:











KontorsIDNamnTelefonnummer
1Avesta0226 - 222 22


Avdelning:









AvdelningsIDNamn
1Utveckling



Är det något kvar?

Bra. Det var andra formen det. 3:e regeln säger att vi datat i en tabell måste härröra till primärnyckeln. Och det enda datat som inte gjorde det var KontorsNummer och Kontor. Men eftersom vi stoppade det i en egen tabell så upfyller databasen även 3NF.


Vad hände sen?

Vi har nu byggt en databas som är lätt att växa i. Den kommer fungera när det finns 70 olika kontor och 25 tusen anställda. Vad som är kvar är att lägga till index för att snabba upp dataåtkomsten. Man brukar säga att en databas är bra uppbyggd när de vanligaste SQL frågorna kräver att man hämtar data från max 3 olika tabeller. Om dina frågor kräver att du hämtar data från 6-7 tabeller bör du fundera på att göra om din databas. Du ska därför inte följa reglerna stenhårt. Exempelvis postnummer och ort behöver man inte stoppa i en egen tabell, det är data som sällan ändras och inte tar alltför stor plats.
Upp

0 Kommentarer

Skriv en kommentar på artikeln

Ditt betyg på artikeln



Kommentar:





Nyligen

  • 08:28 Butiksskyltar: Hur upplever utbude
  • 22:31 Slappna av
  • 19:55 kick-off med fokus på hälsa?
  • 19:53 kick-off med fokus på hälsa?
  • 16:24 Föreslå en skönhetsklinik online
  • 16:23 Föreslå en skönhetsklinik online
  • 18:42 Hvor finder man håndlavede lamper
  • 18:41 Hvor finder man håndlavede lamper

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 771
27 960
271 761
605
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies