Basis van databases

De primaire sleutel van de tabel Bestelling (BestelNr, ArtikelNr, Aantal, KlantNr, Klantnaam) is {BestelNr, ArtikelNr}, en de functionele afhankelijkheden zijn {BestelNr, ArtikelNr} → Aantal, BestelNr → KlantNr en KlantNr → Klantnaam. Wat is het juiste resultaat van de normalisatie van deze tabel tot de derde normaalvorm?

  1. ABestelregel (BestelNr, ArtikelNr, Aantal, KlantNr), Klant (KlantNr, Klantnaam)
  2. BBestelregel (BestelNr, ArtikelNr, Aantal), Bestelling (BestelNr, KlantNr), Klant (KlantNr, Klantnaam)
  3. CBestelregel (BestelNr, ArtikelNr, Aantal), Bestelling (BestelNr, KlantNr, Klantnaam)
Antwoord en toelichting tonen

Antwoord: B. Bestelregel (BestelNr, ArtikelNr, Aantal), Bestelling (BestelNr, KlantNr), Klant (KlantNr, Klantnaam)

De tweede normaalvorm is een toestand in de eerste normaalvorm waarin geen kolom afhangt van slechts een deel van de primaire sleutel (geen partiële functionele afhankelijkheid). BestelNr → KlantNr is een partiële functionele afhankelijkheid, omdat KlantNr alleen door BestelNr wordt bepaald, dat slechts een deel van de primaire sleutel is; de oorspronkelijke tabel is dus in de eerste normaalvorm, maar niet in de tweede. Door de kolommen die door BestelNr worden bepaald af te splitsen naar Bestelling (BestelNr, KlantNr, Klantnaam), ontstaat de tweede normaalvorm. De derde normaalvorm is een toestand in de tweede normaalvorm waarin geen kolom wordt bepaald via een andere kolom dan de primaire sleutel (geen transitieve functionele afhankelijkheid). In Bestelling zit nog de transitieve functionele afhankelijkheid BestelNr → KlantNr → Klantnaam, dus wordt ook Klant (KlantNr, Klantnaam) afgesplitst. De drie tabellen Bestelregel (BestelNr, ArtikelNr, Aantal), Bestelling (BestelNr, KlantNr) en Klant (KlantNr, Klantnaam) zijn dan in de derde normaalvorm. Door ze op BestelNr en KlantNr te joinen, ontstaat de oorspronkelijke tabel weer.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Basis van databases

  1. 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?
  2. 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?
  3. 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?
  4. 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?
  5. 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?