prev up next

SQL-Statements 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. Entferne die Sichten wieder:
    
    drop view PruefenSicht
    drop view StudProf
    drop view ProfNote
    

  5. Lege Untertyp als Verbund von Obertyp und Erweiterung an:
    
    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)
    GO
    create view Profs as
       select a.persnr, a.name, d.rang, d.raum
       from   Angestellte a, ProfDaten d
       where  a.PersNr = d.PersNr
    GO
    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
    

  6. Lege Obertyp als Vereinigung von Untertypen an (zwei der drei Untertypen sind schon vorhanden):
    
    create table AndereAngestellte (PersNr      integer not null,
                                    Name        varchar(30) not null)
    GO
    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
    


prev up next