Compito 27/05/2014 - Esercizio C

Tema:

Dato il seguente schema relazionale R❬{A,B,C,D,E,F,G}, {AB→EG, EF→DA, B→C, CB→A}❭

  1. dare una copertura canonica;
  2. dare almeno una chiave;
  3. dire se esistono almeno due chiavi;
  4. dire se lo schema è in 3NF (giustificando la risposta), e se non lo è trasformarlo in 3NF specificando gli schemi delle relazioni risultanti.

Nota: il tema è stato sviluppato con la parte teorica qui: https://diario.softml.it/su-chiavi-superchiavi-e-terza-forma-normale/

Sviluppo:

1) calcolo le chiusure

AB+ = {AB} (banale)

AB+ = {ABEG} (per 1)

AB+ = {ABCEG} (per 3 - fine)

EF+ = {EF} (banale)

EF+ = {ADEF} (per 2 - fine)

B+ = {B} (banale)

B+ = {BC} (per 3)

B+ = {ABC} (per 4)

B+ = {ABCEG} (per 1 - fine)

CB+ = {ABCEG} (come B+)

2) espando la parte destra

AB→E

AB→G

EF→A

EF→D

B→C

BC→A

3) semplifico, se possibile, la parte sinistra

Siccome B→C, BC→A si può riscrivere come C→A.

Siccome B→C e C→A, AB→E e AB→G si può riscrivere come B→E e B→G.

B→E

B→G

EF→A

EF→D

B→C

C→A

4) creo le relazioni in 3NF:

R1 = ❬{A,B,C,E,G}, {B→ACEG}❭

R2 = ❬{A,D,E,F}, {EF→AD}❭

5) verifico di avere una chiave in una relazione o ne creo una nuova

dal punto 1 capisco che non ho una chiave.

BF sono attributi presenti solo a sinistra (determinanti), quindi provo a verificare se questo insieme fa da chiave.

BF+ = {BF} (banale)

BF+ = {BEF}

BF+ = {BEFG}

BF+ = {ABEFG}

BF+ = {ABDEFG}

BF+ = {ABCDEFG} (contiene tutti gli attributi quindi è chiave)

Creo una relazione contenente la chiave

R3 = ❬{B,F}❭