Databas ,normalform och normalisering.

Permalänk

Databas ,normalform och normalisering.

Hej Sweclockers!

Jag skall snart skriva en tentamen och har problem med att lösa en uppgift från en extenta, undrar om någon här har input på hur svaret ser ut.

Uppgiften är som följer: http://i.imgur.com/3PyDGUi.png?1

Svaret jag får fram är att

a) Relationens kandidatnycklar är: id, (kundr+varunr)
b) Relationen är i första normalformen pga att en delmängd av de primära attributen bestämmer andra ickeprimära attribut (kundr->kundnamn, varunr -> varunamn)

Jag är helt lost på hur jag skall omvandla den till tredje normalformen dock, såhär har jag gjort:

Kund (id, kundnr,kundnamn) - ID som primärnyckel
Vara(Varunr,varunamn) - Varunr som primärnyckel
Order(id,varunr) - Sammansatt primärnyckel, båda är även foreign keys.

Anledningen till att jag skapar en ordertabell är för att relationen är många till många.

Jag kan tillägga att på en annan tentamen finns exakt samma fråga, dock utan "id" som kolumn. På den tentan var ovanstående svar rätt om man tar bort id som primärnyckel och ersätter det med kundnr. Känns dock fel att ha flera unika kolumner i en relation? Hur hade ni löst uppgiften / svarat?

Tacksam för all hjälp!

Permalänk
Medlem

@snigeljavel:

Jag ser tabellen som en lista av ordrar, så i teorin borde K1 (Anna) kunna äga flera V1 (Dator). Det är olyckligt att det inte finns ett sådant exempel med i listan, för nu är det svårt att veta. Hur som helst så hittar du kandidatnycklar (som jag minns det) genom att rita ut beroenden mellan attribut.

id <--- kundnr <-- kundnamn (vet du id så vet du kundnr så vet du kundnamn)
id <-- varunr <-- varunamn

Du letar nu efter en nyckel som unikt identifierar godtycklg rad _utan_ att vara beroende av någon annan. id är den enda som kvalificerar här. kundnr + varunr skulle kunna vara en kandidatnyckel om varje person bara kunde köpa en produkt av varje, och om inte id fanns. Så det är svar på a.

Tabellen är trivialt i 2NF eftersom kandidatnyckeln bara består av en kolumn.

För att sätta databasen i 3NF så ska du ta bort alla transitiva beroenden, eller med andra ord, varje kolumn som inte är en primär nyckel ska vara direkt beroende av en primär nyckeln. Du har två transitiva beroenden ovan, ett från kundnamn till id (via kundnr) och ett från varunamn till id (via varunr). Slutresultatet blir således tre tabeller:

ORDER id | kundnr | varunr KUND kundnr | kundnamn VARA varunr | varunamn

Så hade jag löst uppgiften, men jag kan inte garantera att jag fått 20p =/

Visa signatur

Louqe Ghost S1 MK3 | Asus ROG Strix B660-I Gaming WiFi | Intel Core i7 12700K | nVidia RTX 2070 Super FE | Corsair 64GB (2x32GB) DDR5 5600MHz CL40 Vengeance | Samsung 980 PRO M.2 NVMe SSD 2TB | Corsair SF750 750W 80+ Platinum | Noctua NH-L12 Ghost S1 edition | Kablar från pslate customs | 2 stk Dell Ultrasharp 3014 | Logitech MX Keys | Logitech MX Anywhere