Tema:
Dato il seguente schema relazionale R❬{A,B,C,D,E,F,G}, {AB→EG, EF→DA, B→C, CB→A}❭
- dare una copertura canonica;
- dare almeno una chiave;
- dire se esistono almeno due chiavi;
- 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}❭