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;