prev up next


SQL-Queries zum Anlegen von Sichten

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

1.
Lege Sicht an für Prüfungen ohne Note:
create view pruefenSicht as
   select MatrNr, VorlNr, PersNr
   from pruefen;
2.
Lege Sicht an für Studenten mit ihren Professoren:
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;

3.
Lege Sicht an mit Professoren und ihren Durchschnittsnoten:
create view ProfNote (PersNr, Durchschnittsnote) as
  select PersNr, avg (Note)
  from pruefen
  group by PersNr;

4.
Lege Untertyp als Verbund von Obertyp und Erweiterung an:
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;

5.
Lege Obertyp als Vereinigung von Untertypen an:
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);

prev up next