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);