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 / Forum översikt / inlägg

Posta nytt inlägg


Normalisering

Postades av 2007-07-03 14:47:34 - Benny Jonsson, i forum sql-server/msde, Tråden har 20 Kommentarer och lästs av 2020 personer

Om den enda nycklen som finns i tabeller i en databas är en (Identity) räknare kan databasen då någon gång nå högre än första normalformen?


Svara

Sv: Normalisering

Postades av 2007-07-03 15:03:14 - Niklas Jansson

Ja, första klarar den ju, det är svårt att inte klara...
Den andra måste den väl rimligtvis kunna utan större problem.
Kika på http://en.wikipedia.org/wiki/Database_normalization


Svara

Sv:Normalisering

Postades av 2007-07-04 10:35:10 - Benny Jonsson

Hur vanligt är det att genomgående använda räknare som är ensam nycklar i tabeller.
Man kanske når en högre teoretisk normalform men informationen i tabellerna får en "lägre" normalform. Exempelvis så kan ju ett bilregister bli.

Fordon (id, reg)
1, ABC 123
2, DEF 312
3, ABC 123

Ägare (id, fordonId , ägare)
1, 2, 'Kalle Kula'
2, 2, 'Kalle Kula'
3, 3, 'Sven Svensson'
4, 1, 'Greger Person'

(fordonID relation till fordon id)


Svara

Sv: Normalisering

Postades av 2007-07-04 10:59:05 - Niklas Jansson

Om du har ordentliga foreign keys så kan du ju bryta ut allt, och har du vettiga constraints så måste det väl funka.

Frågeställningen är lite märklig, hur har den uppstått?


Svara

Sv:Normalisering

Postades av 2007-07-04 11:59:16 - Benny Jonsson

Jag har fått en databas i knät där det är räknaren som är nyckel i alla tabeller. Det finns inga constraints och i stort sätt alla fällt tillåter null. Jag är bara lite kritisk till hur vi skall kunna få någon kvalitet på data i denna databas.


Svara

Sv: Normalisering

Postades av 2007-07-04 12:41:50 - Pontus Wång

Man bör inte alltid sträva efter en full normalisering av en databas trots det som lärs ut på högskolor och liknande, ett reallife exempel är den databas jag jobbar i nu som är fullt normaliserad och i det närmaste perfekt på papperet, den är vacker och logisk att titta på men närman man använder sju fält (primärnyckeln i tabell 1) för att binda ihop en tabell med en annan tabell som i sin tur är bunden till en tredje på sex fält är det inte så roligt att skriva sql'n längre.

Sunt förnuft bör råda och får man en databas i knät där sunt förnuft icke har rådit så måste man ta mod till sig och kasta den hårt i huvudet på människan som gjort den.


Svara

Sv:Normalisering

Postades av 2007-07-04 15:02:51 - Benny Jonsson

Jo det är ju dit jag försöker komma... (till sunt förnuft). Har du 7 primärnycklar i en tabell så tycker inte jag att det är sunt förnuft :-)


Svara

Sv: Normalisering

Postades av 2007-07-04 15:09:36 - Niklas Jansson

Högskolor lär väl inte alls ut att man ska normalisera så långt som möjligt (åtminstone inte min).

Syftet med normalisering är ju väldigt jordnära, man vill undvika anomalier. Varje nivå upp (åtminstone över 3) ger nya typer av anomalier, och tar bort några. Vad man vill är att hitta en nivå där databasens design implicerar så vettiga krav som möjligt.


Svara

Sv:Normalisering

Postades av 2007-07-04 15:36:38 - Benny Jonsson

Mitt mål är att databasen minst skall kunna hålla reda på att den inte får dubbletter av "samma post". Det tycker inte jag man uppnår genom att sätta räknare som primärnyckel....


Svara

Sv: Normalisering

Postades av 2007-07-04 17:45:33 - Lars-Erik Eriksson

Jodå det går bra att undvika dubletter ( i det avseeende du menar) även om man har räknare. Man kan använda constraints.


Svara

Sv:Normalisering

Postades av 2007-07-04 21:15:06 - Tomas Johansson

Bara för att sju fält tillsammans bildar en sammansatt kandidatnyckel (d.v.s. kan potentiellt väljas som primärnyckel) så behöver man faktiskt inte välja en sådan kandidatnyckel som primärnyckel.
Man kan istället välja en surrogatnyckel (t.ex. en automatisk räknare) som primärnyckel.
(och då blir den den sammansatta kandidatnyckeln med sju fält istället en sekundärnyckel)

Om databasen är normaliserad till tredje normalformen så lär man f.ö. uppnå femte normalformen genom att inte använda några sammansatta primärnycklar:
http://www.inconcept.com/jcm/September2004/Pascal.html
> Relational tables ... without composite keys that are in 3NF are also fully normalized (in 5NF*)

Dessutom (vilket är mycket viktigare än att uppnå 5NF, och som även redan har påpekats) så blir det mindre jobbigt att joina om alla primärnycklar (och därmed också främmande nycklar) består av endast ett fält istället för att vara sammansatt med flera fält.

Det är INTE på det viset att man får en ickenormaliserad databas genom att introducera surrogatnycklar.
Om någon har valt att använda sammansatta primärnycklar (bestående av naturliga fält som tillsammans är unika, istället för ett enda artificiellt unikt fält) så är det alltså ett val som någon har gjort, men det är inget som kan skyllas på ett krav/önskemål på en normaliserad databasstruktur, eftersom man alltid har möjlighet att lägga till en surrogatnyckel utan att försämra normaliseringen (och som sagt, man till och med lär förbättra den med en icke sammansatt nyckel)

/ Tomas


Svara

Sv: Normalisering

Postades av 2007-07-05 00:33:10 - Pontus Wång

Tack Tomas för klargörandet, jag har fått den databsen i knät från en konsult som lyfter 1250 kronor i timmen från vårat företag och totalt förkastat större delen av modellen samt idiotin att använda de naturliga nycklarna, en typisk fråga som kopplade ihop fyra tabeller kunde bli runt 2000 bytes stor och det utan andra urvalskriterier än sammankopplingen.


Svara

Sv:Normalisering

Postades av 2007-07-05 14:25:00 - Benny Jonsson

Lite fel av mig kanske att blanda in normalisering när det egentligen inte var det jag ville ha svar på :-)

Exempelvis om om jag har följande 2 tabeller.

ProduktGrupp(idGrupp, namn)
ProduktPris(Namn, idGrupp, pris)

Kan jag lösa så att Namn, idGrupp i ProduktPris tabellen tillsamans är unika (så att inte samma produkt kan ha två pris, men olika produkter kan ha samma namn om de tillhör olika grupper) utan att sätta båda som nycklar?


Svara

Sv: Normalisering

Postades av 2007-07-05 14:33:42 - Niklas Jansson

Ja, med unique constraints.

Något i stil med
CONSTRAINT NoDuplicates UNIQUE (Namn, idGrupp);


Svara

Sv: Normalisering

Postades av 2007-07-05 14:33:43 - Thomas Vanhaniemi

Du kan sätta en constraint på att de två fälten tillsammans ska vara unika, så det är absolut inga problem


Svara

Sv:Normalisering

Postades av 2007-07-05 15:18:31 - Niklas Jansson

Nästa gång får du nog vara betydligt snabbare, Thomas, så här långt efter kan du inte svara... ;)


Svara

Sv:Normalisering

Postades av 2007-07-05 15:26:48 - Benny Jonsson

Saken blir ju att i mitt exempel ovan så kan jag ju inte ha någon primärnyckel alls (om jag inte lägger till en räknare) om unique på två fält skall fylla någon funktion :-(


Svara

Sv: Normalisering

Postades av 2007-07-05 16:07:11 - Niklas Jansson

Men du kan ha en räknare också. Det är ju inget problem. En rad = ID = en kombination av nr och namn.


Svara

Sv:Normalisering

Postades av 2007-07-05 16:34:26 - Thomas Vanhaniemi

Niklas, jag måste ju vänta tills den riktiga problemställningen träder fram klart och tydligt ;)

Och som det sägs, det är inga problem att ha en räknare för att underlätta sammankoppling av tabeller, även om det finns medlemmar som skulle duga som PK tillsammans.

Jag brukar ha en räknare i de flesta tabeller, men i tabeller som används för många till många relationer sätter jag primärnyckeln till de två fält som behövs, eftersom det är det mest naturliga.

Men bara för att det finns två eller flera kandidater som tillsammans skapar en unik rad är det inte sagt att de är de bästa att använda som PK. Till exempel skulle man i varje tabell kunna ha alla fält hörande till PK, men det skulle bli ett helvete att skriva SQL satserna.

Jag tycker att två, absolut maximalt tre, fält kan agera primärnyckel, annars skapar man en räknare och sätter de fält som tillsammans ska vara unika ihop med en constraint.

Sen är det ju prestandafunderingar kring detta också, är till exempel ingen idé att köra primärnycklar på teckensträngar då de i många fall drar ner prestandan och gör index mycket stora, helt i onödan.


Svara

Sv: Normalisering

Postades av 2007-07-06 08:12:45 - Niklas Jansson

Det jag menade var iofs tidsskillnaden mellan båda våra svar... =)

Men jag håller med om vad du säger i sak.


Svara

Sv:Normalisering

Postades av 2007-07-06 08:42:18 - Thomas Vanhaniemi

Jaha, noterade inte att du var hela 1 sekund före med att säga samma sak som jag =)
Det kan inte bli så mycket mer tight med tid än det ;)


Svara

Nyligen

  • 14:24 CBD regelbundet?
  • 14:23 CBD regelbundet?
  • 14:22 Har du märkt några verkliga fördel
  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo

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 569 616
27 953
271 709
5 648
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