Legat de noua functionalitate din sql2008 denumita "sparse columns" si de exemplul cu respectivele produse care au caracteristici diferite (ex. pentru mouse : este wireless = {D/N} , ... pentru monitor: tip = {CRT, LCD} ), soluţia sugerata a fost utilizarea unei singure tabele care va include ca şi câmpuri toate caracteristicile (ex. IsWireless) ca şi campuri care accepta si valori nule.
Problema enuntata mai sus e in primul rand (in opinia mea) una de proiectare a bazei de date. Daca am avea la dispozitie o baza de date orientata-obiect sau un limbaj de programare orientat-obiect atunci solutia ar fi fost simpla: specializarea & mostenirea.
![](http://img215.imageshack.us/img215/5467/exmq3.gif)
In cazul acesta subclasele Monitor si Caiet vor mosteni atributele superclasei Produs.
Aceasta diagrama UML poate fi implementata intr-o baza de date relationala astfel:
a) câte o tabela pentru fiecare clasă =>
Produs(CodProdus - Cheie Primara, Denumire)
Monitor(CodProdus - CheiePrimara si CheieExterna referinta Produs(CodProdus), Tip, Diagonala, DimensiunePunct, ...)
Caiet(CodProdus - CheiePrimara referinta Produs(CodProdus) si CheieExterna, NrPagini)
E adevarat ca va apare astfel o joncţiune suplimentară.
b) o singură tabelă care include toate atributele (cazul amintit de catre tine)
c) câte o tabelă pentru fiecare subclasă =>
Monitor(CodProdus - CheiePrimara, Denumire, Tip, Diagonala, DimensiunePunct, ...)
Caiet(CodProdus - CheiePrimara, Denumire, NrPagini)
Alta solutie de proiectare a bazei de date ar presupune crearea urmatoarelor tabele:
Produs(CodProdus - CheiePrimara, Denumire)
Caracteristica(CodCaracteristica - CheiePrimara, Denumire)
CaracteristicaProdus(CodCaracteristicaProdus - CheiePrimara, CodProdus - CheieExterna, CodCaracteristica - CheieExterna, Valoare) (CodProdus + CodCaracteristica index cu valori unice si nenule daca caracteriticile sunt monovaloare)
E adevarat ca solutia de mai sus:
[1] nu este 100% in spiritul modelului relational,
[2] presupune 2 joncţiuni suplimentare,
[3] este cea mai flexibilă (îmi permite chiar să adaug noi caracteristici dinamic, fară a fi necesară modificarea codului sursă a aplicaţiei client la adăugarea unei noi caracteristici).
... alte soluţii ... de proiectare / implementare.