Die mangelnden Modellierungsmöglichkeiten des relationalen Modells in Bezug auf Generalisierung und Spezialisierung können teilweise kompensiert werden durch die Verwendung von Sichten. Nicht alle Sichten sind update-fähig, da sich eine Änderung ihrer Daten nicht immer auf die Originaltabellen zurückpropagieren läßt
create view pruefenSicht as select MatrNr, VorlNr, PersNr from pruefen;
create view StudProf (Sname, Semester, Titel, PName) as select s.Name, s.Semester, v.Titel, p.Name from Studenten s, hoeren h, Vorlesungen v, Professoren p where s.MatrNr = h.MatrNr and h.VorlNr = v.VorlNr and v.gelesenVon = p.PersNr;
create view ProfNote (PersNr, Durchschnittsnote) as select PersNr, avg (Note) from pruefen group by PersNr;
drop view PruefenSicht; drop view StudProf; drop view ProfNote;
create table Angestellte (PersNr integer not null, Name varchar(30) not null); create table ProfDaten (PersNr integer not null, Rang character(2), Raum integer); create table AssiDaten (PersNr integer not null, Fachgebiet varchar(30), Boss integer) create view Profs as select a.persnr, a.name, d.rang, d.raum from Angestellte a, ProfDaten d where a.PersNr = d.PersNr; create view Assis as select a.persnr, a.name, d.fachgebiet, d.boss from Angestellte a, AssiDaten d where a.PersNr = d.PersNr;
Entferne die Tabellen und Sichten wieder:
drop table Angestellte; drop table AssiDaten; drop table ProfDaten; drop view Profs; drop view Assis;
create table AndereAngestellte (PersNr integer not null, Name varchar(30) not null); create view Angestellte as (select PersNr, Name from Professoren) union (select PersNr, Name from Assistenten) union (select PersNr, Name from AndereAngestellte);
Entferne die Tabelle und die Sichten wieder:
drop table andereAngestellte; drop view Angestellte;