Schüler | (Vorname, Nachname) |
Projekte | (Thema) |
Lehrer | (Vorname, Nachname) |
Fachbereiche | (Fach) |
Bewertungen | (Erarbeitung, Dokumentation, Präsentation) |
Beispiel: Der Index für das Feld "Nachname" der Tabelle "Schüler".
Dieser Index ermöglicht es, die Datensätze der Tabelle "Schüler" sortiert nach den Nachnamen auszugeben.
... | Sabine | Erdmann |
... | Veronika | Ernst |
... | Peter | Friedel |
... | Lutz | Friedrich |
... | ... | ... |
(Hinweis: In Fix-Prolog müssen geringfügige Veränderungen vorgenommen werden.)
/* Relationale Datenbank "Schulprojekte" in Prolog */ /* Tabelle "Schueler" */ /* schueler(SNr,Vorname,Nachname) */ schueler(1,"Ina","Lange",). schueler(2,"Petra","Kunze"). schueler(3,"Sabine","Erdmann"). schueler(4,"Peter","Friedel"). schueler(5,"Anna","Neumann"). schueler(6,"Jens","Voeller"). schueler(7,"Nadine","Winter"). schueler(8,"Petra","Sauer"). schueler(9,"Fred","Sauer"). schueler(10,"Veronika","Ernst"). schueler(11,"Achim","Wunderlich"). schueler(12,"Ralf","Mayer"). schueler(13,"Hanna","Reuter"). schueler(14,"Lutz","Friedrich"). schueler(15,"Soeren","Schmidt").
SNr ist der Primärschlüssel der Tabelle "Schueler".
/* Tabelle "Projekte" */ /* projekte(PNr,Thema) */ projekte(1,"Sprachen"). projekte(2,"Programmieren"). projekte(3,"Biochemie"). projekte(4,"Astrophysik"). projekte(5,"Computer").
PNr ist der Primärschlüssel der Tabelle "Projekte".
/* Tabelle "Bewertungen" */ /* bewertungen(SNr,PNr,Erarbeitung,Dokumentation,Praesentation) */ bewertungen(1,1,1,2,1). bewertungen(2,1,2,3,3). bewertungen(3,1,1,1,2). bewertungen(4,2,2,3,2). bewertungen(5,2,1,3,2). bewertungen(6,3,3,2,4). bewertungen(7,3,2,3,1). bewertungen(8,3,4,3,2). bewertungen(9,4,2,1,2). bewertungen(10,4,2,2,3). bewertungen(11,5,2,3,3).
SNr ist der Primärschlüssel der Tabelle "Bewertungen". Zwischen der Tabelle "Schueler"
und der Tabelle "Bewertungen" besteht eine 0:1-Beziehung (einige Schler haben kein Projekt
erarbeitet, kein Schüler hat an mehr als einem Projekt gearbeitet).
PNr ist Fremdschlüssel in der Tabelle "Bewertungen". Zwischen der Tabelle "Projekte" und der
Tabelle "Bewertungen" besteht eine 1:n-Beziehung (an einem Projekt hat ein oder haben mehrere
Schüler gearbeitet).
/* Berechnen der Gesamtnote */ gesamtnote(SNr,PNr,G):-bewertungen(SNr,PNr,E,D,P),G is round((E+D+P)/3). /* Tabelle "Lehrer" */ /* lehrer(LNr,Vorname,Nachname) */ lehrer(1,"Klaus","Hunger"). lehrer(2,"Kerstin","Werner"). lehrer(3,"Gerd","Schubert"). lehrer(4,"Martin","Kummer"). lehrer(5,"Nina","Schiller"). lehrer(6,"Lutz","Hiller"). lehrer(7,"Bernd","Klein"). lehrer(8,"Doris","Ahnert"). lehrer(9,"Bert","Stoll").
LNr ist der Primärschlüssel der Tabelle "Lehrer".
/* Tabelle "Fachbereiche" */ /* fachbereiche(FNr,Fach) */ fachbereiche(1,"Deutsch"). fachbereiche(2,"Englisch"). fachbereiche(3,"Informatik"). fachbereiche(4,"Mathematik"). fachbereiche(5,"Biologie"). fachbereiche(6,"Chemie"). fachbereiche(7,"Astronomie"). fachbereiche(8,"Physik").
FNr ist der Primärschlüssel der Tabelle "Fachbereiche".
/* Tabelle "LehrerFachbereiche" */ /* lehrerfachbereiche(LNr,FNr) */ lehrerfachbereiche(1,1). lehrerfachbereiche(1,2). lehrerfachbereiche(2,1). lehrerfachbereiche(2,2). lehrerfachbereiche(3,3). lehrerfachbereiche(4,5). lehrerfachbereiche(4,6). lehrerfachbereiche(5,5). lehrerfachbereiche(5,6). lehrerfachbereiche(6,7). lehrerfachbereiche(6,8). lehrerfachbereiche(7,4). lehrerfachbereiche(7,6). lehrerfachbereiche(8,4). lehrerfachbereiche(8,6). lehrerfachbereiche(9,6).
LNr und FNr bilden den Primärschlüssel der Hilfstabelle "LehrerFachbereiche". Diese Hilfstabelle realisiert zwischen
den Tabellen "Lehrer" und "Fachbereiche" eine m:n-Beziehung (jeder Lehrer ist in mindestens einem Fachbereich tätig,
in jedem Fachbereich ist mindestens ein Lehrer tätig).
/* Tabelle "LehrerProjekte" */ /* lehrerprojekte(LNr,PNr) */ lehrerprojekte(1,1). lehrerprojekte(2,1). lehrerprojekte(3,2). lehrerprojekte(4,3). lehrerprojekte(5,3). lehrerprojekte(6,4). lehrerprojekte(3,5).
LNr und PNr bilden den Primärschlüssel der Hilfstabelle "LehrerProjekte". Diese Hilfstabelle realisiert zwischen den
Tabellen "Lehrer" und "Projekte" eine m:n-Beziehung (einige Lehrer haben ein oder mehrere Projekte betreut, jedes
Projekt wurde von mindestens einem Lehrer betreut).
/* Anfragen 1 bis 6 */ anfrage1(V,N,T) :-schueler(SNr,V,N),projekte(PNr,T),bewertungen(SNr,PNr,_,_,_). anfrage2(V,N,G) :-schueler(SNr,V,N),projekte(PNr,T),gesamtnote(SNr,PNr,G). anfrage3(V,N) :-lehrer(LNr,V,N),lehrerfachbereiche(LNr,FNr),fachbereiche(FNr,"Chemie"). anfrage4(E,D,P,T) :-schueler(SNr,"Petra","Sauer"),bewertungen(SNr,PNr,E,D,P),projekte(PNr,T). anfrage5(LV,LN,F,SV,SN):-lehrer(LNr,LV,LN), lehrerfachbereiche(LNr,FNr), fachbereiche(FNr,F), lehrerprojekte(LNr,PNr), bewertungen(SNr,PNr,_,_,_,), schueler(SNr,SV,SN). anfrage6(V,N) :-schueler(SNr,V,N),not bewertungen(SNr,_,_,_,_,). ?-anfrage1(Vorname,Nachname,Thema). ?-anfrage2(Vorname,Nachname,Gesamtnote). ?-anfrage3(Vorname,Nachname). ?-anfrage4(B,D,P,Thema). ?-anfrage5(LVorname,LNachname,Fach,SVorname,SNachname). ?-anfrage6(Vorname,Nachname). /* Index fuer Feld "Nachname" der Tabelle "Schueler" */ /* index(SNr) */ index(3). index(10). index(4). index(14). index(2). index(1). index(12). index(5). index(13). index(8). index(9). index(15). index(6). index(7). index(11). /* Indexanfrage */ indexanfrage(V,N):-index(SNr),schueler(SNr,V,N). ?-indexanfrage(Vorname,Nachname). /* Loeschanfragen 1 und 2 */ loeschanfrage1(LNr):-retract(lehrer(LNr,_,_)), retract(lehrerfachbereiche(LNr,_)), retract(lehrerprojekte(LNr,_)). loeschanfrage2(SNr):-retract(schueler(SNr,_,_)), retract(bewertungen(SNr,_,_,_,_,)), retract(index(SNr)). ?-loeschanfrage1(6). ?-loeschanfrage2(9).