Nedarvning mellem tabeller i PostgreSQL
Jeg sidder og leger med et databaseprojekt hvor jeg vil registrere nogle forskellige typer hardware. Disse har nogle attributes der er fælles, samt nogle specielle for de forskellige subtyper. Målet er at tabellen Hardware skal kender til samtlige enheder, mens andre tabeller såsom Harddrives og Printers skal holde de mere specifikke informationer.Dette kan tilsyneladende løses på (mindst) to måder. Følgende er opskrevet som "semi-sql", for overskuelighedens skyld...
1) Tre tabeller med 1-1 relationer fra subtyper til base tabel:
"Hardware" (id, placering, ansvarlig, brand, model)
"Printer" (id REFERENCES "Hardware", farver, ppm)
"Harddrives" (id REFERENCES "Hardware", size, interface, rpm)
2) En base tabel, og to tabeller der benytter INHERITS funktionaliteten:
"Hardware" (id, placering, ansvarlig, brand, model)
"Printer" (farver, ppm) INHERITS "Hardware"
"Printer" (farver, ppm) INHERITS "Hardware"
"Harddrives" (size, interface, rpm) INHERITS "Hardware"
Jeg er interesseret i at vide hvilke problemer jeg vil kunne få med hhv. den ene og den anden løsning. Har testet en del selv og har gjort mig følgende observationer:
1 pro: Virker mest relationelt korrekt.
1 con: Besværligt at udføre SELECT, UPDATE og INSERT. Kan sandsynligvis løses ved at lave et view til hver subtype. En record i "Hardware" kan have flere subtyper, hvilket gør datakvaliteten sårbar.
2 pro: Nemt at udføre SELECT, UPDATE og INSERT.
2 con: Primary key contraint er ugyldigt på tværs af tabellerne. Flere records kan få samme id, hvilket ødelægger den relationelle model.
Nogen der har noget at tilføje til listen? Hvad har jeg overset?