Basis van databases

De primaire sleutel van de tabel Medewerker (MedewerkerNr, Naam, Afdelingscode, Afdelingsnaam) is MedewerkerNr, en elke kolom bevat één waarde. De functionele afhankelijkheden zijn MedewerkerNr → Naam, MedewerkerNr → Afdelingscode en Afdelingscode → Afdelingsnaam. Welke uitspraak over de normaalvorm van deze tabel is juist?

  1. AIn de tweede normaalvorm, maar niet in de derde normaalvorm
  2. BIn de eerste normaalvorm, maar niet in de tweede normaalvorm
  3. CIn de derde normaalvorm
Antwoord en toelichting tonen

Antwoord: A. In de tweede normaalvorm, maar niet in de derde normaalvorm

Elke kolom bevat één enkele, niet-herhalende waarde, dus de tabel is in de eerste normaalvorm. Omdat de primaire sleutel uit de ene kolom MedewerkerNr bestaat, kan een partiële functionele afhankelijkheid van een deel van de sleutel niet voorkomen, dus de tabel is ook in de tweede normaalvorm. Afdelingsnaam wordt echter bepaald via Afdelingscode, dat niet de primaire sleutel is, zoals in MedewerkerNr → Afdelingscode → Afdelingsnaam; door deze transitieve functionele afhankelijkheid is de tabel niet in de derde normaalvorm. Zoals de tabel nu is, wordt de afdelingsnaam in de rij van elke medewerker van dezelfde afdeling herhaald, en het hernoemen van een afdeling vereist het herschrijven van veel rijen. Door een tabel Afdeling (Afdelingscode, Afdelingsnaam) af te splitsen en in de tabel Medewerker alleen Afdelingscode te bewaren, ontstaat de derde normaalvorm. Afdelingscode in de tabel Medewerker wordt dan een vreemde sleutel die naar de tabel Afdeling verwijst.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Basis van databases

  1. In een database die vooral wordt gebruikt om te lezen en te aggregeren, worden tabellen die door normalisatie zijn opgesplitst soms bewust samengevoegd tot één tabel, zodat dezelfde gegevens dubbel worden bewaard (denormalisatie). Welke combinatie van een voordeel en een nadeel van dit ontwerp is juist?
  2. In een ER-diagram bestaat tussen studenten en vakken een veel-op-veelrelatie: één student volgt meerdere vakken, en één vak wordt door meerdere studenten gevolgd. Wat is een geschikte manier om deze relatie met tabellen in een relationele database te realiseren?
  3. In de tabel Rekening wordt een transactie gestart, en worden een UPDATE die 300 aftrekt van het saldo van rekening A en een UPDATE die 300 bij het saldo van rekening B optelt uitgevoerd. Daarna wordt in plaats van COMMIT een ROLLBACK uitgevoerd. Wat gebeurt er met de tabel Rekening?
  4. Welke van de ACID-eigenschappen die een transactie moet hebben, is de eigenschap dat een overboeking die rekening A debiteert en rekening B crediteert ofwel volledig ofwel helemaal niet wordt uitgevoerd, ook als er halverwege een storing optreedt?
  5. De voorraad van een product in de tabel Voorraad is 10. Transactie T1 leest de voorraad en schrijft de waarde min 3 terug, en T2 leest de voorraad en schrijft de waarde min 5 terug. Als ze zonder locks worden uitgevoerd in de volgorde T1 leest, T2 leest, T1 schrijft, T2 schrijft, wat is dan de uiteindelijke voorraad?