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;
create table Angestellte (PersNr integer not null, Name varchar2(30) not null); create table ProfDaten (PersNr integer not null, Rang character(2), Raum integer); create table AssiDaten (PersNr integer not null, Fachgebiet varchar2(30), Boss integer); create view Professoren as select a.persnr, a.name, d.rang, d.raum from Angestellte a, ProfDaten d where a.PersNr = d.PersNr; create view Assistenten as select a.persnr, a.name, d.fachgebiet, d.boss from Angestellte a, AssiDaten d where a.PersNr = d.PersNr;
create table Professoren (PersNr integer not null, Name varchar2(30) not null, Rang character(2), Raum integer); create table Assistenten (PersNr integer not null, Name varchar2(30) not null, Fachgebiet varchar2(30), Boss integer); create table AndereAngestellte (PersNr integer not null, Name varchar2(30) not null); create view Angestellte as (select PersNr, Name from Professoren) union (select PersNr, Name from Assistenten) union (select PersNr, Name from AndereAngestellte);