\documentclass{bschlangaul-aufgabe} \bLadePakete{syntax,rmodell} \begin{document} \bAufgabenMetadaten{ Titel = {Aufgabe 2}, Thematik = {Universitätsdatenbank}, Referenz = 66111-1996-F.A2, RelativerPfad = Examen/66111/1996/03/Aufgabe-2.tex, ZitatSchluessel = bloechl, ZitatBeschreibung = {Seite 219-221}, BearbeitungsStand = mit Lösung, Korrektheit = unbekannt, Ueberprueft = {unbekannt}, Stichwoerter = {Entity-Relation-Modell, Verfeinertes Relationenmodell, SQL}, EinzelpruefungsNr = 66111, Jahr = 1996, Monat = 03, AufgabeNr = 2, } Eine Universitätsdatenbank soll folgende Daten verwalten. \footcite[Seite 219-221]{bloechl} \begin{itemize} \item Studenten (Name, Matrikelnummer, Geburtsdatum, Adressen, Semesteranzahl, Studiengang, Fakultät, belegte Lehrveranstaltungen und deren Art) \item Lehrveranstaltungen (Anfangszeit, Semester, Art (Vorlesung, Seminar, Übung, Praktikum) Name, Anzahl der Hörer, Nummer im Vorlesungsverzeichnis, Anzahl Semesterwochenstunden, Dozent, Raum) \end{itemize} \begin{enumerate} %% % a) %% \item Entwerfen Sie ein ER-schema für diese Applikation! Berücksichtigen Sie dabei, dass eine Vorlesung in 2 Unterrichtseinheiten aufgeteilt werden kann (z. B. Mo 10.00 und Do 14.00). Begründen Sie Ihren Entwurf!\index{Entity-Relation-Modell} \footcite{examen:66111:1996:03} %% % b) %% \item Spezifizieren Sie für die Entity-Typen Attribut und zeichnen Sie die Schlüsselattribute aus! %% % c) %% \item Geben Sie ein relationales Datenbankschema an!\index{Verfeinertes Relationenmodell} \footcite[Uni-ER-Modell, Aufgabe 2]{db:ab:4} \begin{bAntwort} \ttfamily \footnotesize Dozent(\bPrimaer{PersNr:INT}, Name:VARCHAR(20), \bFremd{FakName:VARCHAR(40)[Fakultät]})\\ Fakultät(\bPrimaer{Name:VARCHAR(40)})\\ Lehrveranstaltung(\bPrimaer{Nr:INT}, Name:VARCHAR(20), SWS:INT, Semester:INT, Art:VARCHAR(20), \bFremd{PersNr:INT[Dozemtn]})\\ Student(\bPrimaer{MatrNr:INT}, Name:VARCHAR(40), Geburtsdatum:DATE, Semesteranzahl:INT, \bFremd{FakName:VARCHAR(40)[Fakultät]}, Studiengang:VARCHAR(40))\\ Adresse(\bPrimaer{Adresse:VARCHAR(100)})\\ belegt(\bFremd{Nr:INT[Lehrveranstaltung], MatrNr:INT[Adresse]})\\ besitzt(\bFremd{Adresse:VARCHAR(100)[Adresse], MatrNr:INT[Student]})\\ Durchführung(\bPrimaer{Zeit:DATE, RaumNr:INT}, \bFremd{Nr:INT[Student]})\\ \end{bAntwort} \item Welche Fremdschlüssel gibt es in diesem Schema? \end{enumerate} \noindent Es soll nun mit SQL\index{SQL} eine entsprechende relationale Datenbank angelegt werden. Geben Sie für folgende Aufgaben die jeweiligen SQL-Befehle an. \begin{enumerate} \setcounter{enumi}{2} \item Die Tabellenschemata von \texttt{Student} und \texttt{besitzt} sollen erzeugt werden. \begin{bAntwort} % Datenbankname: universitaetsdatenbank \begin{minted}{sql} CREATE TABLE Fakultaet ( Name VARCHAR(20) PRIMARY KEY ); CREATE TABLE Adresse ( Adresse VARCHAR(30) PRIMARY KEY ); CREATE TABLE Student ( MatrNr INTEGER PRIMARY KEY, Name VARCHAR(20) NOT NULL, Geburtsdatum DATE, Semesteranzahl INTEGER, Fakultaetsname VARCHAR(20), Studiengang VARCHAR(20), FOREIGN KEY (Fakultaetsname) REFERENCES Fakultaet(Name) ); CREATE TABLE besitzt ( Adresse VARCHAR(30) NOT NULL, MatrNr INTEGER NOT NULL, PRIMARY KEY (Adresse, MatrNr), FOREIGN KEY (Adresse) REFERENCES Adresse(Adresse), FOREIGN KEY (MatrNr) REFERENCES Student(MatrNr) ); INSERT INTO Adresse VALUES ('Kaulbacherstraße 3'); \end{minted} \end{bAntwort} \item Am Tabellenschema von \texttt{Student} werden zwei Änderungen vorgenommen: \begin{itemize} \item Es soll ein weiteres Attribut Vorname hinzugefügt werden. \begin{bAntwort} \begin{minted}{sql} ALTER TABLE Student ADD COLUMN Vorname VARCHAR(20); \end{minted} \end{bAntwort} \item Als Integritätsbedingung wird festgelegt, dass die Semesterzahl kleiner als 15 sein muss. \end{itemize} \begin{bAntwort} \begin{minted}{sql} ALTER TABLE Student ADD CHECK (Semesteranzahl < 15); \end{minted} oder \begin{minted}{sql} ALTER TABLE Student ADD CONSTRAINT begrenzung_Semester CHECK (Semesteranzahl < 15); \end{minted} \end{bAntwort} \end{enumerate} \end{document}