% (c) Andreas Hofmeier
% http://www.lgut.uni-bremen.de/an-h/
% http://an-h.de/ oder http://an-h.de.vu/ (ohne Werbung)
\documentclass[11pt]{article}
\usepackage{a4,german}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}
\usepackage{ngerman}
\usepackage[dvips]{graphics}
\usepackage{latexsym}
\usepackage{exscale}
\usepackage{amssymb,amsmath}
%\documentclass[11pt]{report}
%\usepackage{isolatin1}
%\usepackage{german}
\usepackage{epsf}
\usepackage[dvips]{rotating}

\usepackage{longtable}
\usepackage{dcolumn}

\usepackage{listings}

%\usepackage{eurosym}
%\EUR{300}

\usepackage{multicol}
%\usepackage[dvips]{rotating}

%ENDHEAD

\parindent=0pt
\parskip=\baselineskip

%\setcounter{tocdepth}{4}
%\setcounter{secnumdepth}{4}

\pagestyle{plain}
%\pagestyle{myheadings}
%\markright{\mbox{\bf A. Hofmeier, EMT Laborversuch FS}}
%\markboth{\mbox{\bf A. Hofmeier, EMT Laborversuch FS}}{\mbox{\bf A. Hofmeier, EMT Laborversuch FM}}

\begin{titlepage}
\title{Datenbanken Vorlesungsbericht}
\author{Elizabeth Fobizi -- Axel Schmidt -- Andreas Hofmeier}
%\date{12. Mai 2003}
\date{}
\end{titlepage}


\begin{document}
\maketitle

\begin{center}
\begin{tabular}{rl}

Auftraggeber:    & Dipl. Ing. Heinrich Pasligh,\\
                 & Hochschule Bremen \\
Vermittler:      & Prof. Dr.-Ing. Uwe Meyer\\
Abgabe am:       & 18.06.2004\\
                 & \\
Version:         & 0.12 \\
Letzte Änderung: & 18.06.2004 -- 01:18 durch A. Hofmeier \\
Status:          & Ready, Last\\
\end{tabular}

\begin{tabular}{rcll}
Andreas Hofmeier  &  & & \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\\
 & & &\\
Axel Schmidt      &  & & \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\\
 & & &\\
Elizabeth Fobizi  &  & & \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\\
 & & &\\

\end{tabular}
\end{center}



\begin{abstract}
.
\\
Dieser Bericht dokumentiert die Erstellung einer Datenbank
durch Axel Schmidt, Elizabeth Fobizi und Andreas Hofmeier im Zuge
der Datenbankvorlesung von Prof. Dr.-Ing. Meyer.
\\\\
Es wurde ein Szenario erstellt, in dem das Einsatzziel festgehalten
wurde. Anhand des Szenarios konnte ein ER-Diagramm entwickelt werden,
welches die beschriebenen Zusammenhänge grafisch aufzeigt. Die
Entwicklung des ER-Diagramms erfolgte hierbei in mehreren Schritten.
\\\\
Mit Hilfe dieses Diagramms wurde ein Übergang in das relationale
Datenmodell vorgenommen. Die entwickelten Relationen wurden zunächst
tabellarisch aufgestellt und anschließend in SQL-Befehle umgewandelt.
Um einen direkten Zugang auf die Datenbank zu vermeiden, wurden
Sichten und Prozeduren definiert.
\\\\
Das Szenario:
\\\\
Für die Hochschule Bremen soll ein Datenbanksystem zur Verwaltung
der Stellenausschreibungen und der daraufhin erfolgenden Bewerbungen
erstellt werden.
\end{abstract}
\newpage

\tableofcontents
\newpage


\section{Das Szenario}

Die Datenbank soll die Verwaltung und Verarbeitung von
Stellenausschreibungen und den zugehörigen Bewerbungen an der
Hochschule Bremen vereinfachen.

Hierzu müssen die Daten der Ausschreibung, sowie die Daten der
Bewerber in die Datenbank eingepflegt werden.

Die Einstellung neuer Mitarbeiter gliedert sich in die folgenden
Punkte auf:

\begin{enumerate}

\item Stellenausschreibung

Nachdem eine Stelle bewilligt ist, wird diese ausgeschrieben, dass
heißt zum Beispiel in einer Zeitung veröffentlicht oder dem Arbeitsamt
gemeldet. Die Stellenausschreibung wird in der Datenbank erfasst, um
ein spätere Zuordnung der Bewerber zu ermöglichen. Die
Stellenausschreibung umfasst folgende Informationen:

\begin{itemize}

\item Stellenbezeichnung (z. B. Fachbereichssekretärin)
\item Gewünschter Einstellungstermin
\item Stellenbewertung / Vergütungsgruppe (z. B. Vc/Vb BAT)
\item Aufgabenbereich(e)
\item Musskriterien -- Geforderte Voraussetzungen
\item Sollkriterien -- Gewünschte Voraussetzungen

\end{itemize}


\item Bewerbungen entgegennehmen

Nachdem die Stellenausschreibung veröffentlicht wurde, gehen
Bewerbungen ein. Diese müssen in die Datenbank eingepflegt werden.

Aus den Bewerbungen werden folgende Daten extrahiert und in die
Datenbank übernommen:

\begin{itemize}

\item Name
\item Vorname
\item Wohnort
\item Strasse
\item Geburtsdatum
\item Familienstand

\item Schulabschluss (Art, Abschlussdatum)
\item Ausbildung (Art, Abschlussdatum)
\item Studium (nicht für alle Stellen; u.U. mehrere Abschlüsse)

\end{itemize}


\item Vorauswahl treffen

Die eingehenden Bewerbungen werden nach folgenden Kriterien
vorsortiert:

\begin{itemize}

\item Musskriterien, die in der Ausschreibung schon vorgegeben sind.
\item Sollkriterien, die z.T. in der Ausschreibung vorgegeben oder nachträglich definiert werden.

\end{itemize}

Die Bewerber müssen über den Stand ihrer Bewerbung informiert werden.

\begin{itemize}

\item Bestätigung über den Eingang der Bewerbung
\item Absage
\item Einladung zum Vorstellungsgespräch
\item Zusage (Einstellung)

\end{itemize}


\item Vorstellungsgespräch

Bei den Vorstellungsgesprächen sollten die bisher erfassten Daten des
Bewerbers übersichtlich vorliegen. Diese Daten werden durch
zusätzliche Bewertungen (z. B. soziale Kompetenzen) ergänzt, die sich
aus dem Vorstellungsgespräch ergeben.

\end{enumerate}




\newpage
\section{Realisierung}



\subsection{ER-Diagramm}

\centerline{\epsffile{DAB.ER-Diagramm.eps}}
\newpage


\subsection{Konventionen}

In den folgenden Tabellen werden folgende Abkürzungen und Zeichen
verwenden:

\begin{tabular}{rl}
NW & Nullwert \\
D. & Default \\
Con. & Constraint \\
$\rightarrow$ & Feld verweist auf vorhandenen Eintrag in Tabelle \\
$\leftarrow$ & ... wird von Tabelle verwiesen \\
PK & Primary Key \\
FK & Foreign Key \\
STRING & Steht für CHARACTER VARYING in der Datenbank \\
NUM & Steht für NUMERIC in der Datenbank \\
SERIAL & Automatisches wählen einer neuen Nummer (letzte plus eins) beim \\
       & Einfügen eines neuen Datensatzes. \\
%-	&  alle Prozent- und Temperaturangaben in der Datenbank wurden als \\
%        & NUMERIC(3,2) abgelegt \\

\end{tabular}



\subsection{Tabellen/Entitys}



\subsubsection{personen, orte}

In diesen Tabellen werden die Stammdaten über die Bewerber abgelegt.

{\bf personen:}

\begin{multicols}{2}[][1cm]

$\leftarrow$ bewerbungen\\
$\leftarrow$ spersonenqualifikationen\\
$\leftarrow$ spersonenabschluesse\\
$\leftarrow$ veroeffentlichungen\\
$\leftarrow$ erfahrungen

\end{multicols}

\begin{tabular}{|p{3.8cm}|l|l|l|l|p{3.4cm}|}
\hline
Feldname & Datentyp & NW & D. & Con. & Bemerkung \\
\hline
\hline
id & INT & Nein & - & PK & SERIAL \\
titel & STRING & Ja & - & - & - \\
vorname & STRING & Nein & - & - & - \\
name & STRING & Nein & - & - & - \\
strasse & STRING & Nein & - & - & mit Hausnummer \\
plz & INT & Nein & - & - & - \\
orts\_id & INT & Ja & - & FK & $\rightarrow$ orte \\
telenumpriv & STRING & Ja & - & - & - \\
telenumfirm & STRING & Ja & - & - & - \\
telenummobile & STRING & Ja & - & - & - \\
email & STRING & Ja & - & - & - \\
gebdatum & DATUM & Ja & - & - & - \\
familienstand & INT & Ja & - & - & 0: ledig, 1: verheiratet, 2: geschieden\\
\hline
\end{tabular}



{\bf orte:}

\begin{multicols}{2}[][1cm]

$\leftarrow$ personen\\
$\leftarrow$ institutionen

\end{multicols}

\begin{tabular}{|p{3.8cm}|l|l|l|l|p{3.4cm}|}
\hline
Feldname & Datentyp & NW & D. & Con. & Bemerkung \\
\hline
\hline
id & INT & Nein & - & PK & SERIAL \\
name & STRING & Nein & - & - & - \\
\hline
\end{tabular}


\subsubsection{institutionen}

\begin{multicols}{2}[][1cm]

$\leftarrow$ spersonenqualifikationen\\
$\leftarrow$ spersonenabschluesse\\
$\leftarrow$ veroeffentlichungen\\
$\leftarrow$ erfahrungen

\end{multicols}

An dieser Stelle werden Daten von Firmen, Unternehmen, Schulen,
Hochschulen, etc, abgelegt.

\begin{tabular}{|p{3.8cm}|l|l|l|l|p{3.4cm}|}
\hline
Feldname & Datentyp & NW & D. & Con. & Bemerkung \\
\hline
\hline
id & INT & Nein & - & PK & SERIAL \\
name & STRING & Nein & - & - & - \\
strasse & STRING & Ja & - & - & mit Hausnummer \\
plz & INT & Ja & - & - & - \\
orts\_id & INT & Ja & - & FK & $\rightarrow$ orte \\
ansprechpartner & STRING & Ja & - & - & Name des ... \\
email & STRING & Ja & - & - & - \\
telenum & STRING & Ja & - & - & - \\
bemerkung & TEXT & Ja & - & - & - \\
\hline
\end{tabular}


\newpage
\subsubsection{stellenaus -- Stellenausschreibungen, verguetungsklassen}

An dieser Stelle werden die Stellenausschreibungen abgelegt. Einer
Stellenausschreibung können beliebig viele Bewerber zugeordnet sein.

{\bf stellenaus:}

\begin{multicols}{2}[][1cm]

$\leftarrow$ vqualifikationensoll\\
$\leftarrow$ vqualifikationenmuss\\
$\leftarrow$ bewerbungen

\end{multicols}

\begin{tabular}{|p{3.8cm}|l|l|l|l|p{3.4cm}|}
\hline
Feldname & Datentyp & NW & D. & Con. & Bemerkung \\
\hline
\hline
id & INT & Nein & - & PK & SERIAL \\
stellenbezeichnung & STRING & Nein & - & - & - \\
stellenbeschreibung & TEXT & Nein & - & - & - \\
veroeffentlicht & STRING & Ja & - & - & Kommentar \\
veroeffentlichtam & DATUM & Ja & - & - & letzte Ver. \\
aufgabenfeld & TEXT & Nein & - & - & Voraussichtliche Tätigkeiten \\
geweinstellungsdatum & DATUM & Ja & - & - & Wann soll die Stelle besetzt werden? \\
bewerbungsschluss & DATUM & Nein & - & - & - \\
verguetungsklasse & INT & Ja & - & FK & $\rightarrow$ verguetungsklassen\\
fachbereich & STRING & Ja & - & - & - \\
verantwortlicher & STRING & Nein & - & - & Name \\
veranttele & STRING & Nein & - & - & Telefonnummer des Verantwortlichen \\
verantemail & STRING & Nein & - & - & eMail-Adresse des Verantwortlichen \\
probezeit & INT & Nein & - & - & in Monaten \\
befristung & INT & Nein & - & - & in Monaten \\
intern & BOOL & Nein & F & - & interne Ausschreibung  \\
\hline
\end{tabular}


{\bf verguetungsklassen:}

$\leftarrow$ stellenaus

\begin{tabular}{|p{3.8cm}|l|l|l|l|p{3.4cm}|}
\hline
Feldname & Datentyp & NW & D. & Con. & Bemerkung \\
\hline
\hline
id & INT & Nein & - & PK & SERIAL \\
name & STRING & Nein & - & - & - \\
beschreibung & TEXT & Ja & - & - & - \\
einkommen & NUM & Ja & - & - & Euro pro Jahr \\
\hline
\end{tabular}



\subsubsection{bewerbungen, bmedien}

In dieser Tabelle werden die eigentlichen Bewerbungen abgelegt. Die
Bewerbungen werden mittels des Attributs {\tt bewerber}, welches auf
eine Eintrag in der Tabelle {\tt personen} verweist, einer Person
zugeordnet. Mittels {\tt auf} einer Stellenausschreibung. Mit Hilfe
der Datums-Attribute kann der aktuelle Stand der Bewerbung ermittelt
werden: Sind zum Beispiel die Felder {\tt geladen} und {\tt abgesagt}
belegt, so ist daraus zu schließen, dass der Bewerber zwar zum
Vorstellungsgespräch eingeladen wurde, schließlich jedoch nicht
eingestellt wurde.

{\bf bewerbungen:}

\begin{multicols}{2}[][1cm]

$\leftarrow$ personen

\end{multicols}

\begin{tabular}{|p{3.8cm}|l|l|l|l|p{3.4cm}|}
\hline
Feldname & Datentyp & NW & D. & Con. & Bemerkung \\
\hline
\hline
id & INT & Nein & - & PK & SERIAL \\
eingang & DATUM & Nein & - & - & - \\
fruhstereinstllungstermin & DATUM & Ja & - & - & - \\
auf & INT & Nein & - & FK & $\rightarrow$ stellenaus \\
bewerber & INT & Nein & - & FK & $\rightarrow$ personen \\
abgesagt & DATUM & Ja & - & - & - \\
geladen & DATUM & Ja & - & - & zum Vorstellungsgespräch \\
geladen\_zeit & STRING & Ja & - & - & Uhrzeit \\ 
zugesagt & DATUM & Ja & - & - & - \\
eingestellt & DATUM & Ja & - & - & - \\
intern & BOOL & Nein & F & - & interner Bewerber \\
vorrang & BOOL & Nein & F & - & bei Auswahl \\
medium & INT & Nein & - & FK & $\rightarrow$ bmedien \\
kommentar & TEXT & Ja & - & - & Erwähnenswertes \\
\hline
\end{tabular}


{\bf bmedien:}

In dieser Tabellen sollen die Namen aller Medien abgelegt werden, auf
welchen eine Bewerbung eingeht. Zum Beispiel: per Post, eMail,
persönlich abgegeben oder intern.

$\leftarrow$ bewerbungen

\begin{tabular}{|p{3.8cm}|l|l|l|l|p{3.4cm}|}
\hline
Feldname & Datentyp & NW & D. & Con. & Bemerkung \\
\hline
\hline
id & INT & Nein & - & PK & SERIAL \\
name & STRING & Nein & - & - & - \\
\hline
\end{tabular}



\subsubsection{qualifikationen, sstellenausqualifikationen, spersonenqualifikationen}

Hier werden Qualifikationen gespeichert, welche dann den Einzelnen
Personen (Bewerbern) über {\tt spersonenqualifikationen} zugeordnet
werden. Einer Stellenausschreibung werden Soll- und
Mussqualifikationen über {\tt sstellen\-aus\-qualifikationen} zugeordnet.

In den Zuordnungstabellen wird zusätzlich das Grad der jeweiligen
Qualifikation abgelegt: 0 entspricht hier Grundkenntnissen, 4 kennzeichnet
werden Experten.

{\bf qualifikationen:}

\begin{multicols}{2}[][1cm]

$\leftarrow$ sstellenausqualifikationen\\
$\leftarrow$ spersonenqualifikationen

\end{multicols}


\begin{tabular}{|p{3.8cm}|l|l|l|l|p{3.4cm}|}
\hline
Feldname & Datentyp & NW & D. & Con. & Bemerkung \\
\hline
\hline
id & INT & Nein & - & PK & SERIAL \\
name & STRING & Nein & - & - & - \\
beschreibung & TEXT & Ja & - & - & - \\
\hline
\end{tabular}


{\bf Soll- und Mussqualifikationen:\\sstellenausqualifikationen: stellenaus $\stackrel{n:m}{- \lozenge -}$ qualifikationen}

\begin{tabular}{|p{3.8cm}|l|l|l|l|p{3.4cm}|}
\hline
Feldname & Datentyp & NW & D. & Con. & Bemerkung \\
\hline
\hline
qualifikationen\_id & INT & Nein & - & FK & $\rightarrow$ qualifikationen \\
stellenaus\_id & INT & Nein & - & FK & $\rightarrow$ stellenaus \\
grad & INT & Nein & - & - & 0=Grundlagen, ... 4=Experte \\
musssoll & INT & Nein & - & - & 0=muss, 1=soll \\
\hline
\end{tabular}

Die beiden FKs und {\tt grad} werden in dieser Tabelle zum PK zusammengefasst.


{\bf Qualifikationen einer Person:\\spersonenqualifikationen: personen $\stackrel{n:m}{- \lozenge -}$ qualifikationen}

Über das Attribut {\tt institut\_id} kann der Name und Anschrift der
Institution abgelegt werder, bei welcher die Qualifikation erworben
wurde.

\begin{tabular}{|p{3.8cm}|l|l|l|l|p{3.4cm}|}
\hline
Feldname & Datentyp & NW & D. & Con. & Bemerkung \\
\hline
\hline
qualifikationen\_id & INT & Nein & - & FK & $\rightarrow$ qualifikationen \\
personen\_id & INT & Nein & - & FK & $\rightarrow$ personen \\
institut\_id & INT & Ja & - & FK & $\rightarrow$ institutionen \\
grad & INT & Nein & - & - & 0=Grundlagen, ... 4=Experte \\
\hline
\end{tabular}
Die beiden obersten FKs werden in dieser Tabelle zum PK zusammengefasst.



\subsubsection{abschluesse, abschlusstypen, sstellenausabschluesse, spersonenabschluesse}

In dieser Tabelle werden Abschlüsse gesammelt und mittels {\tt
spersonen\-ab\-schlues\-se} einem Bewerber zugewiesen. Ob dieser Abschluss
für eine Stelle notwendig oder wünschenswert ist, wird in der Tabelle
{\tt sstellenausabschluesse} festgelegt. Der Typ des Abschlusses kommt
durch einen Verweis auf einen Eintrag der Tabelle {\tt abschlusstypen}
zum Ausdruck. In dieser Tabelle stehen zum Beispiel: Ausbildung,
Studium, Schule.

{\bf abschluesse:}

\begin{multicols}{2}[][1cm]

$\leftarrow$ sstellenausabschluesse\\
$\leftarrow$ spersonenabschluesse

\end{multicols}

\begin{tabular}{|p{3.8cm}|l|l|l|l|p{3.4cm}|}
\hline
Feldname & Datentyp & NW & D. & Con. & Bemerkung \\
\hline
\hline
id & INT & Nein & - & PK & SERIAL \\
name & STRING & Nein & - & - & - \\
beschreibung & TEXT & Ja & - & - & - \\
regelzeit & INT & Ja & - & - & in Monaten \\
typ & INT & Ja & - & FK & $\rightarrow$ abschlusstypen \\
\hline
\end{tabular}


{\bf abschlusstypen:}

\begin{multicols}{2}[][1cm]

$\leftarrow$ abschluesse

\end{multicols}

\begin{tabular}{|p{3.8cm}|l|l|l|l|p{3.4cm}|}
\hline
Feldname & Datentyp & NW & D. & Con. & Bemerkung \\
\hline
\hline
id & INT & Nein & - & PK & SERIAL \\
name & STRING & Nein & - & - & -  \\
beschreibung & TEXT & Ja & - & - & - \\
\hline
\end{tabular}


{\bf Soll- und Mussabschlüsse für Stellenausschreibungen:\\sstellenausabschluesse: stellenaus $\stackrel{n:m}{- \lozenge -}$ abschluesse}

\begin{tabular}{|p{3.8cm}|l|l|l|l|p{3.4cm}|}
\hline
Feldname & Datentyp & NW & D. & Con. & Bemerkung \\
\hline
\hline
abschluesse\_id & INT & Nein & - & FK & $\rightarrow$ abschluesse \\
stellenaus\_id & INT & Nein & - & FK & $\rightarrow$ stellenaus \\
musssoll & INT & Nein & - & - & 0=muss, 1=soll \\
\hline
\end{tabular}

Die beiden FKs werden in dieser Tabelle zum PK zusammengefasst.


\newpage
{\bf Abschlüsse von Personen:\\spersonenabschluesse: personen $\stackrel{n:m}{- \lozenge -}$ abschluesse}

\begin{tabular}{|p{3.8cm}|l|l|l|l|p{3.4cm}|}
\hline
Feldname & Datentyp & NW & D. & Con. & Bemerkung \\
\hline
\hline
abschluesse\_id & INT & Nein & - & FK & $\rightarrow$ abschluesse \\
personen\_id & INT & Nein & - & FK & $\rightarrow$ personen \\
institut\_id & INT & Ja & - & FK & $\rightarrow$ institutionen \\
erlangt & DATUM & Ja & - & - & - \\
durchschnittsnote & NUM & Ja & - & - & - \\
dauer & INT & Ja & - & - & in Monaten \\
\hline
\end{tabular}

Die beiden obersten FKs werden in dieser Tabelle zum PK zusammengefasst.



\subsubsection{veroeffentlichungen, vmedien}

Hier werden mögliche Veröffentlichungen (z.B. Bücher, Artikel) eines
Bewerbers abgelegt. Der Bewerber wird mit Hilfe eines FKs verwiesen.

{\bf veroeffentlichungen:}

\begin{tabular}{|p{3.8cm}|l|l|l|l|p{3.4cm}|}
\hline
Feldname & Datentyp & NW & D. & Con. & Bemerkung \\
\hline
\hline
id & INT & Nein & - & PK & SERIAL \\
bewerber & INT & Nein & - & FK & $\rightarrow$ personen, Autor \\
titel & STRING & Nein & - & - & - \\
veroeffentlicht & DATUM & Ja & - & - & ... am \\
beschreibung & TEXT & Ja & - & - & - \\
medium & INT & Ja & - & FK & $\rightarrow$ vmedien \\
namezeitschrift & STRING & Ja & - & - & - \\
verweis & STRING & Ja & - & - & ISBN, Internetadr. \\
auflage & NUM & Ja & - & - & Anzahl Verkauft \\
verlag & INT & Ja & - & FK & $\rightarrow$ institutionen \\
%% verlag & STRING & Ja & - & - & - \\
\hline
\end{tabular}


{\bf vmedien:}

In dieser Tabellen sollen die Namen aller Medien abgelegt werden,
durch welche eine Veröffentlichung stattfinden. Zum Beispiel:
Fachzeitschrift, Zeitung, Buch, Internet.

$\leftarrow$ veroeffentlichungen

\begin{tabular}{|p{3.8cm}|l|l|l|l|p{3.4cm}|}
\hline
Feldname & Datentyp & NW & D. & Con. & Bemerkung \\
\hline
\hline
id & INT & Nein & - & PK & SERIAL \\
name & STRING & Nein & - & - & - \\
\hline
\end{tabular}




\subsubsection{erfahrungen, laender}

In dieser Tabelle werden Erfahrungen abgelegt. Erfahrungen können in
diesem Zusammenhang sein: Anstellungen bei Unternehmen -- Arbeitserfahrung,
Auslandserfahrungen (z.B. Auslandssemester) oder Praktika.

{\bf erfahrungen:}

\begin{tabular}{|p{3.8cm}|l|l|l|l|p{3.4cm}|}
\hline
Feldname & Datentyp & NW & D. & Con. & Bemerkung \\
\hline
\hline
id & INT & Nein & - & PK & SERIAL \\
bewerber & INT & Nein & - & FK & $\rightarrow$ personen \\
name & STRING & Nein & - & - & - \\
beschreibung & TEXT & Ja & - & - & - \\
ausland & INT & Ja & - & FK & $\rightarrow$ laender \\
institut\_id & INT & Ja & - & FK & $\rightarrow$ institutionen \\
dauer & INT & Ja & - & - & in Monaten \\
beendetam & DATUM & Ja & - & - & - \\
\hline
\end{tabular}


{\bf laender:}

\begin{multicols}{2}[][1cm]

$\leftarrow$ erfahrungen

\end{multicols}

\begin{tabular}{|p{3.8cm}|l|l|l|l|p{3.4cm}|}
\hline
Feldname & Datentyp & NW & D. & Con. & Bemerkung \\
\hline
\hline
id & INT & Nein & - & PK & SERIAL \\
name & STRING & Nein & - & - & - \\
\hline
\end{tabular}

\subsection{Normalisierung}

Die Normalisierung wurde während der Erstellung des ER-Diagramms
bereits intuitiv Berücksichtigt. Jeder Entität wurde ein
Schlüsselattribut (Primärschlüssel oder zusammengesetzte
Fremdattribute) zugeordnet. Aufzählungen wurden durch Auslagerung der
Attribute in eigenständige Entitäten vermieden.

Allerdings ist die Normalisierung nicht in der ganzen Datenbank
vollständig durchgeführt worden. So hätten zum Beispiel {\tt
namezeitschrift} aus der Tabelle {\tt veroeffentlichungen} oder {\tt
straße} aus der Tabelle {\tt personen} ausgelagert werden müssen.




\section{Funktionen und Views}

Die Schnittstelle zwischen der Benutzeroberfläche und der Datenbank
stellen Funktionen und Views da.

Views sind im allgemeinen zum Auslesen von Daten aus der Datenbank
gedacht. Sie Joinen verschiedene Tabellen zu einer sinnvollen
Ausgabetabelle zusammen. Diese Ausgabetabelle kann bei der Abfrage,
von einem Javaprogramm zum Beispiel, mittels where weiter
eingeschränkt werden.

Um Daten in die Datenbank einzufügen, zu verändern oder zu löschen
sind Funktionen vorgesehen.

Im weiteren wird davon ausgegangen, dass verknüpfte Datensätze mittels
``{\tt ON DELETE CASCADE}'' aus der Datenbank entfernt werden können.


{\bf Konventionen:}

Mit ``Haupttabelle(n)'' ist die Tabelle gemeint, welche primär
ausgelesen oder verändert werden soll. Unter ``verknüpfte Tabelle(n)''
laufen alle Tabellen, welche von der jeweiligen Funktion mit verwendet
werden.

Alle Funktionen beginnen mit ``{\tt add\_}'' oder mit ``{\tt rem\_}'',
wobei {\tt add\_} das Hinzufügen oder Ändern von Datensätzen meint und
{\tt rem\_} sich auf das Entfernen von Datensätzen bezieht.

Views beginnen mit ``{\tt get\_}''.




\subsection{get\_abschluesse}

\begin{tabular}{rl}
Haupttabelle(n): & anschluesse \\
verknüpfte Tabelle(n): & abschlusstypen \\
\end{tabular}

Dieses View liefert eine Liste mit allen in der Datenbank abgelegten
Abschlüssen.

Rückgabetabelle:

\begin{tabular}{|p{3.8cm}|l|l|p{5.4cm}|}
\hline
Feldname & Datentyp & NW & Bemerkung \\
\hline
\hline
id & INT & Nein & ID des Abschlusses \\
name & STRING & Nein & des Abschlusses \\
beschreibung & TEXT & Ja & des Abschlusses \\
regelzeit & INT & Ja & in Monaten \\
typ & INT & Ja & ID des Abschlusstyps \\
typname & STRING & Ja & Name des Abschlusstyps \\
\hline
\end{tabular}

\newpage
\subsection{add\_abschluesse}

\begin{tabular}{rl}
Haupttabelle(n): & abschluesse \\
verknüpfte Tabelle(n): & - \\
\end{tabular}

Die Übergabeparameter entsprechen den Feldern der Rückgabetabelle des
Views {\tt get\_abschluesse} bis auf das Feld {\tt typname}, welches
weggelassen werden kann.

Ist das Feld {\tt id} leer, so wird der Abschluss hinzugefügt. Enthält
das Feld die ID eines vorhandenen Datensatzes, so wird dieser
überschrieben.

Rückgabetabelle (eine Zeile):

\begin{tabular}{|p{3.8cm}|l|l|p{5.4cm}|}
\hline
Feldname & Datentyp & NW & Bemerkung \\
\hline
\hline
id & INT & Nein & des neu hinzugefügten oder geänderten Datensatzes \\
\hline
\end{tabular}


\subsection{rem\_abschluesse}

\begin{tabular}{rl}
Haupttabelle(n): & abschluesse \\
verknüpfte Tabelle(n): & - \\
\end{tabular}

Diese Funktion löscht den Abschluss mit der ID {\tt id} -- dies
ist der einzige Übergabeparameter.


\subsection{get\_abschluesse\_personen}

\begin{tabular}{rl}
Haupttabelle(n): & spersonenabschluesse \\
verknüpfte Tabelle(n): & abschluesse, \\
                     & personen, \\
                     & abschlusstypen, \\
                     & institutionen \\
\end{tabular}

Das View {\tt get\_abschluesse\_personen} liefert eine Liste mit
allen Abschlüssen und den zugeordneten Personen, bzw deren IDs
({\tt pid}). Diese Tabelle kann mittels {\tt where} von
Anwenderprogramm auf eine bestimmte Person eingeschränkt werden.

\newpage
Rückgabetabelle ({\tt get\_abschluesse\_personen}):

\begin{tabular}{|p{3.8cm}|l|l|p{5.4cm}|}
\hline
Feldname & Datentyp & NW & Bemerkung \\
\hline
\hline
pid & INT & Nein & ID der Person \\
name & STRING & Nein & des Abschlusses \\
beschreibung & TEXT & Ja & des Abschlusses \\
typ & INT & Ja & ID des Abschlusstyps \\
typname & STRING & Ja & Name des Abschlusstyps \\
institut\_id & INT & Ja & ID des Instituts \\
institut\_name & INT & Ja & Name des Instituts \\
erlangt & DATUM & Ja & - \\
durchschnittsnote & NUM & Ja & - \\
dauer & INT & Ja & in Monaten \\
\hline
\end{tabular}


\subsection{add\_abschluesse\_personen}

\begin{tabular}{rl}
Haupttabelle(n): & spersonenabschluesse \\
verknüpfte Tabelle(n): & - \\
\end{tabular}

Diese Funktion fügt der Person mit der ID {\tt pid} einen neuen
Abschluss mit der ID {\tt aid} hinzu. Der Abschluss wurde am Institut,
welches unter der ID {\tt iid} abgelegt ist, erreicht

Parameter:

\begin{tabular}{|p{3.8cm}|l|l|p{5.4cm}|}
\hline
Parametername & Datentyp & NW & Bemerkung \\
\hline
\hline
pid & INT & Nein & ID der Person \\
aid & INT & Nein & ID des Abschlusses \\
iid & INT & Ja & ID der Institution \\
erlangt & DATUM & Ja & - \\
durchschnittsnote & NUM & Ja & - \\
dauer & INT & Ja & in Monaten \\
\hline
\end{tabular}


\subsection{rem\_abschluesse\_personen}

\begin{tabular}{rl}
Haupttabelle(n): & spersonenabschluesse \\
verknüpfte Tabelle(n): & - \\
\end{tabular}

Diese Funktion entfernt den Abschluss mit der ID {\tt aid} von der
Person mit der ID {\tt pid}.

\newpage
Parameter ({\tt rem\_abschluesse\_personen}):

\begin{tabular}{|p{3.8cm}|l|l|p{5.4cm}|}
\hline
Parametername & Datentyp & NW & Bemerkung \\
\hline
\hline
pid & INT & Nein & ID der Person \\
aid & INT & Nein & ID des Abschlusses \\
\hline
\end{tabular}


\subsection{get\_abschluesse\_stellenaus}

\begin{tabular}{rl}
Haupttabelle(n): & sstellenausabschluesse \\
verknüpfte Tabelle(n): & abschluesse, \\
                     & stellenaus, \\
                     & abschlusstypen \\
\end{tabular}


Das View {\tt get\_abschluesse\_stellenaus} liefert eine Liste mit
allen Abschluesse und den zugeordneten Stellen
bzw. Stellenausschreibungen und deren IDs ({\tt sid}). Diese
Tabelle kann mittels {\tt where} von Anwenderprogramm auf eine
bestimmte Stellenausschreibungen eingeschränkt werden.

Rückgabetabelle:

\begin{tabular}{|p{3.8cm}|l|l|p{5.4cm}|}
\hline
Feldname & Datentyp & NW & Bemerkung \\
\hline
\hline
sid & INT & Nein & ID der Stellenausschreibung \\
name & STRING & Nein & des Abschlusses \\
beschreibung & TEXT & Ja & des Abschlusses \\
typ & INT & Ja & ID des Abschlusstyps \\
typname & STRING & Ja & Name des Abschlusstyps \\
musssoll & INT & Nein & 0=muss, 1=soll Kriterium \\
\hline
\end{tabular}


\subsection{add\_abschluesse\_stellenaus}

\begin{tabular}{rl}
Haupttabelle(n): & sstellenausabschluesse \\
verknüpfte Tabelle(n): & - \\
\end{tabular}

Diese Funktion fügt der Stellenausschreibung mit der ID {\tt sid} einen
neuen Muss- oder Sollabschluss mit der ID {\tt aid} hinzu.

Parameter:

\begin{tabular}{|p{3.8cm}|l|l|p{5.4cm}|}
\hline
Parametername & Datentyp & NW & Bemerkung \\
\hline
\hline
sid & INT & Ja & ID der Stellenausschreibung \\
aid & INT & Nein & ID des Abschlusses \\
musssoll & INT & Nein & 0=muss, 1=soll Kriterium \\
\hline
\end{tabular}


\subsection{rem\_abschluesse\_stellenaus}

\begin{tabular}{rl}
Haupttabelle(n): & sstellenausabschluesse \\
verknüpfte Tabelle(n): & - \\
\end{tabular}

Diese Funktion löscht einen Muss- oder Sollabschluss mit der ID {\tt
aid} aus der Stellenausschreibung mit der ID {\tt sid}.

Parameter:

\begin{tabular}{|p{3.8cm}|l|l|p{5.4cm}|}
\hline
Parametername & Datentyp & NW & Bemerkung \\
\hline
\hline
sid & INT & Nein & ID der Stellenausschreibung \\
aid & INT & Nein & ID des Abschlusses \\
\hline
\end{tabular}


\subsection{get\_abschluesstypen}

\begin{tabular}{rl}
Haupttabelle(n): & abschlusstypen \\
verknüpfte Tabelle(n): & - \\
\end{tabular}

Dieses View gibt eine Tabelle mit allen Abschlusstypen aus. Diese
Tabelle kann mittels where eingeschränkt von Anwenderprogramm werden.

Rückgabetabelle:

\begin{tabular}{|p{3.8cm}|l|l|p{5.4cm}|}
\hline
Feldname & Datentyp & NW & Bemerkung \\
\hline
\hline
id & INT & Nein & ID das Abschlusstyps \\
name & STRING & Nein & -  \\
beschreibung & TEXT & Ja & - \\
\hline
\end{tabular}


\subsection{add\_abschluesstypen}

\begin{tabular}{rl}
Haupttabelle(n): & abschlusstypen \\
verknüpfte Tabelle(n): & - \\
\end{tabular}

Dieses Funktion fügt einen neuen Abschlusstyp ein, wenn der Parameter
{\tt id} leer ist oder überschreibt einen Abschlusstyp, falls eine
gültige ID angegeben ist.

Parameter:

\begin{tabular}{|p{3.8cm}|l|l|p{5.4cm}|}
\hline
Parametername & Datentyp & NW & Bemerkung \\
\hline
\hline
id & INT & Ja & ID das Abschlusstyps \\
name & STRING & Nein & -  \\
beschreibung & TEXT & Ja & - \\
\hline
\end{tabular}


\subsection{rem\_abschluesstypen}

\begin{tabular}{rl}
Haupttabelle(n): & abschlusstypen \\
verknüpfte Tabelle(n): & - \\
\end{tabular}

Dieses Funktion entfernt den Abschlusstyp mit der ID {\tt id} aus der
Tabelle {\tt ab\-schluss\-typen}.

Parameter:

\begin{tabular}{|p{3.8cm}|l|l|p{5.4cm}|}
\hline
Parametername & Datentyp & NW & Bemerkung \\
\hline
\hline
id & INT & Nein & ID das Abschlusstyps \\
\hline
\end{tabular}




\subsection{get\_bewerbungen}

Dieses View liefert eine Liste, welche alle in der Datenbank
gespeicherten Bewerbungen und den zugehörigen Personen und
Stellenausschreibungen beinhaltet. Diese Liste kann mittels einer
where-Klausel schon bei der Anfrage an die Datenbank auf eine Person.
beschränkt werden.

Rückgabetabelle:

\begin{tabular}{|p{3.8cm}|l|l|p{5.4cm}|}
\hline
Feldname & Datentyp & NW & Bemerkung \\
\hline
\hline
id & INT & Nein & der Bewerbung \\
eingang & DATUM & Nein & - \\
fruhstereinstllungstermin & DATUM & Ja & - \\
auf & INT & Nein & ID Stellenausschreibung \\
bewerber & INT & Nein & ID Person \\
abgesagt & DATUM & Ja & - \\
geladen & DATUM & Ja & zum Vorstellungsgespräch \\
geladen\_zeit & STRING & Ja & Uhrzeit \\ 
zugesagt & DATUM & Ja & - \\
eingestellt & DATUM & Ja & - \\
intern & BOOL & Nein & interner Bewerber \\
vorrang & BOOL & Nein & bei Auswahl \\
medium & STRING & Nein & - \\
kommentar & TEXT & Ja & Erwähnenswertes \\
\hline
\end{tabular}


\newpage
\subsection{add\_bewerbungen}

\begin{tabular}{rl}
Haupttabelle(n): & bewerbungen \\
verknüpfte Tabelle(n): & bmedien \\
\end{tabular}

Diese Funktion legt einen neuen Bewerbungen-Rekord in der Datenbank an
oder ändert einen bestehenden ab. Die Übergabeparameter entsprechen den
Spalten der Rückgabetabelle des Views {\tt get\_bewerbungen} mit
diesen Unterschieden:

Das ID-Feld muss leergelassen werden, wenn eine neue Bewerbung
hinzugefügt werden soll. Ist dieses Feld mit einer Nummer besetzt, so
wird der durch diese Nummer gekennzeichnete Datensatz in der Datenbank
(in Tabelle {\tt bewerbungen}) mit den übergebenden Daten
überschrieben.

Ist das Medium (über das die Bewerbung eingegangen ist) mit dem Namen {\tt
bmedien} noch nicht in der Datenbank (in Tabelle {\tt bmedien})
eingepflegt, so wird dies nun getan.


\subsection{rem\_bewerbungen}

\begin{tabular}{rl}
Haupttabelle(n): & bewerbungen \\
verknüpfte Tabelle(n): & - \\
\end{tabular}

Diese Funktion entfernt eine Bewerbung aus der Datenbank (aus der Tabelle
{\tt bewerbungen}). Der zu löschende Datensatz wird durch den einzigen
Parameter -- ID -- beschrieben.




\subsection{get\_bmedien}

\begin{tabular}{rl}
Haupttabelle(n): & bmedien \\
verknüpfte Tabelle(n): & - \\
\end{tabular}

Dieses View liefert eine Liste mit allen in der Tabelle {\tt bmedien}
verzeichneten Medien über die eine Bewerbung eingehen kann:

Rückgabetabelle:

\begin{tabular}{|p{3.8cm}|l|l|p{5.4cm}|}
\hline
Feldname & Datentyp & NW & Bemerkung \\
\hline
\hline
name & STRING & Nein & - \\
\hline
\end{tabular}




\subsection{get\_erfahrungen}

\begin{tabular}{rl}
Haupttabelle(n): & erfahrungen \\
verknüpfte Tabelle(n): & laender \\
\end{tabular}

Dieses View liefert eine Liste, welche alle in der Datenbank
gespeicherten Erfahrungen und den zugehörigen Personen beinhaltet. Diese
Liste kann mittels einer where-Klausel schon bei der Anfrage an die
Datenbank auf eine Person beschränkt werden.

Rückgabetabelle:

\begin{tabular}{|p{3.8cm}|l|l|p{5.4cm}|}
\hline
Feldname & Datentyp & NW & Bemerkung \\
\hline
\hline
id & INT & Nein & der Erfahrung \\
bewerber & INT & Nein & ID der Person \\
name & STRING & Nein & - \\
beschreibung & TEXT & Ja & - \\
ausland & STRING & Ja & Wenn ja, Name. \\
institut\_id & INT & Ja & - \\
dauer & INT & Ja & in Monaten \\
beendetam & DATUM & Ja & - \\
\hline
\end{tabular}


\subsection{add\_erfahrungen}

\begin{tabular}{rl}
Haupttabelle(n): & erfahrungen \\
verknüpfte Tabelle(n): & laender \\
\end{tabular}

Diese Funktion legt einen neuen Erfahrungen-Rekord in der Datenbank an
oder ändert einen bestehenden ab. Die Übergabeparameter entsprechen den
Spalten der Rückgabetabelle des Views {\tt get\_erfahrungen} mit
diesen Unterschieden:

Das ID-Feld muss leergelassen werden, wenn eine neue Erfahrung
hinzugefügt und einer Person zugewiesen werden soll. Ist dieses Feld
mit einer Nummer besetzt, so wird der durch diese Nummer
gekennzeichnete Datensatz in der Datenbank (in Tabelle {\tt
erfahrungen}) mit den übergebenden Daten überschrieben.

Ist das Land mit dem Namen {\tt ausland} noch nicht in der Datenbank
(in Tabelle {\tt laender}) eingepflegt, so wird dies nun getan.


\newpage
\subsection{rem\_erfahrungen}

\begin{tabular}{rl}
Haupttabelle(n): & erfahrungen \\
verknüpfte Tabelle(n): & - \\
\end{tabular}

Diese Funktion entfernt eine Erfahrung aus der Datenbank (aus der Tabelle
{\tt erfahrungen}). Der zu löschende Datensatz wird durch den einzigen
Parameter -- ID -- beschrieben.




\subsection{get\_institutionen}

\begin{tabular}{rl}
Haupttabelle(n): & institutionen \\
verknüpfte Tabelle(n): & orte \\
\end{tabular}

Dieses View liefert eine Liste, welche alle in der Datenbank
gespeicherten Institutionen beinhaltet. Diese
Liste kann mittels einer where-Klausel schon bei der Anfrage an die
Datenbank beschränkt werden. So kann man zum Beispiel eine einzige zu
eine ID gehörenden Institution finden.

Rückgabetabelle:

\begin{tabular}{|p{3.8cm}|l|l|p{5.4cm}|}
\hline
Feldname & Datentyp & NW & Bemerkung \\
\hline
\hline
id & INT & Nein & - \\
name & STRING & Nein & - \\
strasse & STRING & Ja & mit Hausnummer \\
plz & INT & Ja & - \\
ort & STRING & Ja & - \\
ansprechpartner & STRING & Ja & Name des ... \\
email & STRING & Ja & - \\
telenum & STRING & Ja & - \\
bemerkung & TEXT & Ja & - \\
\hline
\end{tabular}


\subsection{add\_institutionen}

\begin{tabular}{rl}
Haupttabelle(n): & institutionen \\
verknüpfte Tabelle(n): & orte \\
\end{tabular}

Diese Funktion legt einen neuen Institutionen-Rekord in der Datenbank an
oder ändert einen bestehenden. Die Übergabeparameter entsprechen den
Spalten der Rückgabetabelle des Views {\tt get\_institutionen} mit
folgendem Unterschieden:

Das ID-Feld muss leergelassen werden, wenn eine neue
Institution hinzugefügt werden soll. Ist dieses Feld mit
einer Nummer besetzt, so wird der durch diese Nummer gekennzeichnete
Datensatz in der Datenbank (in Tabelle {\tt institutionen}) mit den
übergebenden Daten überschrieben.

Ist der Ort mit dem Namen {\tt ort} noch nicht in der Datenbank
(Tabelle {\tt orte}) eingepflegt, so wird dies nun getan.


\subsection{rem\_institutionen}

\begin{tabular}{rl}
Haupttabelle(n): & institutionen \\
verknüpfte Tabelle(n): & - \\
\end{tabular}

Diese Funktion entfernt eine Institution aus der Datenbank (aus der Tabelle
{\tt institutionen}). Der zu löschende Datensatz wird durch den einzigen
Parameter ID beschrieben.




\subsection{get\_laender}

\begin{tabular}{rl}
Haupttabelle(n): & laender \\
verknüpfte Tabelle(n): & - \\
\end{tabular}

Dieses View liefert eine Liste mit allen in der Tabelle {\tt laender}
verzeichneten Ländern:

Rückgabetabelle:

\begin{tabular}{|p{3.8cm}|l|l|p{5.4cm}|}
\hline
Feldname & Datentyp & NW & Bemerkung \\
\hline
\hline
name & STRING & Nein & des Landes \\
\hline
\end{tabular}




\subsection{get\_orte}

\begin{tabular}{rl}
Haupttabelle(n): & orte \\
verknüpfte Tabelle(n): & - \\
\end{tabular}

Dieses View liefert eine Liste mit allen in der Tabelle {\tt orte}
verzeichneten Orten:

Rückgabetabelle:

\begin{tabular}{|p{3.8cm}|l|l|p{5.4cm}|}
\hline
Feldname & Datentyp & NW & Bemerkung \\
\hline
\hline
name & STRING & Nein & des Ortes \\
\hline
\end{tabular}




\subsection{get\_personen}

Dieses View liefert eine Liste, welche alle Personen enthält. Diese
Liste kann mittels einer where-Klausel schon bei der Anfrage an die
Datenbank eingeschränkt werden. So ist es zum Beispiel möglich nur
eine Person mit einer bestimmten ID pro Abfrage zu erhalten.

Rückgabetabelle:

\begin{tabular}{|p{3.8cm}|l|l|p{5.4cm}|}
\hline
Feldname & Datentyp & NW & Bemerkung \\
\hline
\hline
id & INT & Nein & - \\
titel & STRING & Ja & - \\
vorname & STRING & Nein & - \\
name & STRING & Nein & - \\
strasse & STRING & Nein & mit Hausnummer \\
plz & INT & Nein & - \\
ort & STRING & Ja & - \\
telenumpriv & STRING & Ja & - \\
telenumfirm & STRING & Ja & - \\
telenummobile & STRING & Ja & - \\
email & STRING & Ja & - \\
gebdatum & DATUM & Ja & - \\
familienstand & INT & Ja & 0: ledig, 1: verheiratet, 2: geschieden\\
\hline
\end{tabular}


\subsection{add\_personen}

\begin{tabular}{rl}
Haupttabelle(n): & personen \\
verknüpfte Tabelle(n): & orte \\
\end{tabular}

Diese Funktion legt einen neuen Personen-Rekord in der Datenbank an
oder ändert einen bestehenden. Die Übergabeparameter entsprechen den
Spalten der Rückgabetabelle des Views {\tt get\_personen} mit
folgendem Unterschieden:

Das ID-Feld muss leergelassen werden, wenn eine neue
Person hinzugefügt werden soll. Ist dieses Feld mit
einer Nummer besetzt, so wird der durch diese Nummer gekennzeichnete
Datensatz in der Datenbank (in Tabelle {\tt personen}) mit den
übergebenden Daten überschrieben.

Ist der Ort mit dem Namen {\tt ort} noch nicht in der Datenbank
(Tabelle {\tt orte}) eingepflegt, so wird dies nun getan.


\subsection{rem\_personen}

\begin{tabular}{rl}
Haupttabelle(n): & personen \\
verknüpfte Tabelle(n): & - \\
\end{tabular}

Diese Funktion entfernt eine Person aus der Datenbank (aus der Tabelle
{\tt personen}). Der zu löschende Datensatz wird durch den einzigen
Parameter ID beschrieben.




\subsection{get\_qualifikationen}

\begin{tabular}{rl}
Haupttabelle(n): & qualifikationen \\
verknüpfte Tabelle(n): & - \\
\end{tabular}

Das View {\tt get\_qualifikationen} liefert eine Liste mit
allen Qualifikationen.

Rückgabetabelle:

\begin{tabular}{|p{3.8cm}|l|l|p{5.4cm}|}
\hline
Feldname & Datentyp & NW & Bemerkung \\
\hline
\hline
id & INT & Nein & ID Qualifikation \\
name & STRING & Nein & der Qualifikation \\
beschreibung & TEXT & Ja & der Qualifikation \\
\hline
\end{tabular}


\subsection{add\_qualifikationen}

\begin{tabular}{rl}
Haupttabelle(n): & qualifikationen \\
verknüpfte Tabelle(n): & - \\
\end{tabular}

Die Übergabeparameter entsprechen den Feldern der Rückgabetabelle des
Views {\tt get\_qualifikationen}.

Ist das Feld {\tt id} leer, so wird die Qualifikation
hinzugefügt. Enthält das Feld die ID eines vorhandenen Datensatzes, so
wird dieser überschrieben.

Rückgabe: id: ID des neu hinzugefügten oder geänderten Datensatzes.


\newpage
\subsection{rem\_qualifikationen}

\begin{tabular}{rl}
Haupttabelle(n): & qualifikationen \\
verknüpfte Tabelle(n): & - \\
\end{tabular}

Diese Funktion löscht die Qualifikation mit der ID {\tt qid} -- dies
ist der einzige Übergabeparameter.


\subsection{get\_qualifikationen\_personen}

\begin{tabular}{rl}
Haupttabelle(n): & spersonenqualifikationen \\
verknüpfte Tabelle(n): & qualifikationen \\
                     & personen \\
\end{tabular}

Das View {\tt get\_qualifikationen\_personen} liefert eine Liste mit
allen Qualifikationen und den zugeordneten Personen, bzw deren IDs
({\tt pid}). Diese Tabelle kann mittels {\tt where} von
Anwenderprogramm auf eine bestimmte Person eingeschränkt werden.

Rückgabetabelle:

\begin{tabular}{|p{3.8cm}|l|l|p{5.4cm}|}
\hline
Feldname & Datentyp & NW & Bemerkung \\
\hline
\hline
pid & INT & Nein & ID der Person \\
qid & INT & Nein & der Qualifikation \\
name & STRING & Nein & der Qualifikation \\
beschreibung & TEXT & Ja & der Qualifikation \\
grad & INT & Nein & 0=Grundlagen, ... 4=Experte \\
\hline
\end{tabular}


\subsection{add\_qualifikationen\_personen}

\begin{tabular}{rl}
Haupttabelle(n): & spersonenqualifikationen \\
verknüpfte Tabelle(n): & - \\
\end{tabular}

Diese Funktion fügt der Person mit der ID {\tt pid} eine
neue Qualifikation mit der ID {\tt qid} hinzu.

Parameter:

\begin{tabular}{|p{3.8cm}|l|l|p{5.4cm}|}
\hline
Parametername & Datentyp & NW & Bemerkung \\
\hline
\hline
pid & INT & Nein & ID der Person \\
qid & INT & Nein & ID der Qualifikation \\
grad & INT & Nein & 0=Grundlagen, ... 4=Experte \\
\hline
\end{tabular}


\subsection{rem\_qualifikationen\_personen}

\begin{tabular}{rl}
Haupttabelle(n): & spersonenqualifikationen \\
verknüpfte Tabelle(n): & - \\
\end{tabular}

Diese Funktion entfernt die Qualifikation mit der ID {\tt qid} von der
Person mit der ID {\tt pid}.

Parameter:

\begin{tabular}{|p{3.8cm}|l|l|p{5.4cm}|}
\hline
Parametername & Datentyp & NW & Bemerkung \\
\hline
\hline
pid & INT & Nein & ID der Person \\
qid & INT & Nein & ID der Qualifikation \\
\hline
\end{tabular}


\subsection{get\_qualifikationen\_stellenaus}

\begin{tabular}{rl}
Haupttabelle(n): & sstellenausqualifikationen \\
verknüpfte Tabelle(n): & qualifikationen \\
                     & stellenaus \\
\end{tabular}


Das View {\tt get\_qualifikationen\_stellenaus} liefert eine Liste mit
allen Qualifikationen und den zugeordneten Stellen
bzw. Stellenausschreibungen und deren IDs ({\tt sid}). Diese
Tabelle kann mittels {\tt where} von Anwenderprogramm auf eine
bestimmte Stellenausschreibungen eingeschränkt werden.

Rückgabetabelle:

\begin{tabular}{|p{3.8cm}|l|l|p{5.4cm}|}
\hline
Feldname & Datentyp & NW & Bemerkung \\
\hline
\hline
sid & INT & Nein & ID der Stellenausschreibung \\
name & STRING & Nein & der Qualifikation \\
beschreibung & TEXT & Ja & der Qualifikation \\
musssoll & INT & Nein & 0=muss, 1=soll Kriterium \\
grad & INT & Nein & 0=Grundlagen, ... 4=Experte \\
\hline
\end{tabular}


\newpage
\subsection{add\_qualifikationen\_stellenaus}

\begin{tabular}{rl}
Haupttabelle(n): & sstellenausqualifikationen \\
verknüpfte Tabelle(n): & - \\
\end{tabular}

Diese Funktion fügt der Stellenausschreibung mit der ID {\tt sid} eine
neue Muss- oder Sollqualifikation mit der ID {\tt qid} hinzu.

Parameter:

\begin{tabular}{|p{3.8cm}|l|l|p{5.4cm}|}
\hline
Parametername & Datentyp & NW & Bemerkung \\
\hline
\hline
sid & INT & Nein & ID der Stellenausschreibung \\
qid & INT & Nein & ID der Qualifikation \\
musssoll & INT & Nein & 0=muss, 1=soll Kriterium \\
grad & INT & Nein & 0=Grundlagen, ... 4=Experte \\
\hline
\end{tabular}


\subsection{rem\_qualifikationen\_stellenaus}

\begin{tabular}{rl}
Haupttabelle(n): & sstellenausqualifikationen \\
verknüpfte Tabelle(n): & - \\
\end{tabular}

Diese Funktion löscht ein Muss- oder Sollqualifikation mit der ID {\tt
qid} aus der Stellenausschreibung mit der ID {\tt sid}.

Parameter:

\begin{tabular}{|p{3.8cm}|l|l|p{5.4cm}|}
\hline
Parametername & Datentyp & NW & Bemerkung \\
\hline
\hline
sid & INT & Nein & ID der Stellenausschreibung \\
qid & INT & Nein & ID der Qualifikation \\
grad & INT & Nein & 0=Grundlagen, ... 4=Experte \\
\hline
\end{tabular}




\subsection{get\_stellenausschreibungen}

\begin{tabular}{rl}
Haupttabelle(n): & stellenaus \\
verknüpfte Tabelle(n): & verguetungsklassen \\
\end{tabular}

Das View {\tt get\_stellenausschreibungen} liefert eine Liste mit allen
Stellenausschreibungen. Diese Tabelle kann mittels {\tt where}
von Anwenderprogramm noch weiter eingeschränkt werden. Das View
vereinigt die Tabellen {\tt stellenaus} und {\tt verguetungsklassen}
miteinander.

\newpage
Rückgabetabelle ({\tt get\_stellenausschreibungen}):

\begin{tabular}{|p{3.8cm}|l|l|p{5.4cm}|}
\hline
Feldname & Datentyp & NW & Bemerkung \\
\hline
\hline
id & INT & Nein & Identifiziert Datensatz \\
stellenbezeichnung & STRING & Nein & - \\
stellenbeschreibung & TEXT & Nein & - \\
veroeffentlicht & STRING & Ja & Kommentar \\
veroeffentlichtam & DATUM & Ja & letzte Ver. \\
aufgabenfeld & TEXT & Nein & Voraussichtliche Tätigkeiten \\
geweinstellungsdatum & DATUM & Ja & Wann soll die Stelle besetzt werden? \\
bewerbungsschluss & DATUM & Nein & - \\
vkname & STRING & Ja & Name der Vergütungsklasse\\
vkbesch & STRING & Ja & Beschreibung der Vergütungsklasse\\
vkeink & STRING & Ja & Einkommen der Vergütungsklasse\\
fachbereich & STRING & Ja & - \\
verantwortlicher & STRING & Nein & Name \\
veranttele & STRING & Nein & Telefonnummer des Verantwortlichen \\
verantemail & STRING & Nein & eMail-Adresse des Verantwortlichen \\
probezeit & INT & Nein & in Monaten \\
befristung & INT & Nein & in Monaten \\
intern & BOOL & Nein & interne Ausschreibung  \\
\hline
\end{tabular}


\subsection{add\_stellenausschreibungen}

\begin{tabular}{rl}
Haupttabelle(n): & stellenaus \\
verknüpfte Tabelle(n): & verguetungsklassen \\
\end{tabular}

Die Funktion {\tt add\_stellenausschreibungen} legt eine neue
Stellenausschreibung in der Datenbank ab oder ändert eine
bestehende. Die Übergabeparameter entsprechen den Spalten der
Rückgabetabelle des Views {\tt get\_stellen\-aus\-schrei\-bun\-gen}
mit folgendem Unterschieden:

Das ID-Feld muss leergelassen werden, wenn eine neue
Stellenausschreibung hinzugefügt werden soll. Ist dieses Feld mit
einer Nummer besetzt, so wird der durch diese Nummer gekennzeichnete
Datensatz in der Datenbank (in Tabelle {\tt stellenaus}) mit den
übergebenden Daten überschrieben.

Die Felder {\tt vkbesch} und {\tt vkeink} dürfen freigelassen
werden. Ist die Vergütungsklasse mit dem Namen {\tt vkname} noch nicht
in der Datenbank eingepflegt, so wird dies nun getan. Sind die Felder
{\tt vkbesch} und {\tt vkeink} gegeben wird die Datenbank ( die
Tabelle {\tt verguetungsklassen}) mit diesen Werten aktualisiert.


\subsection{rem\_stellenausschreibungen}

\begin{tabular}{rl}
Haupttabelle(n): & stellenaus \\
verknüpfte Tabelle(n): & verguetungsklassen \\
\end{tabular}

Die Funktion {\tt rem\_stellenausschreibungen} entfernt eine
Stellenausschreibung aus der Datenbank (aus der Tabelle {\tt
stellenaus}). Der zu löschende Datensatz wird durch den einzigen
Parameter ID beschrieben.





\subsection{get\_verguetungsklassen}


\begin{tabular}{rl}
Haupttabelle(n): & verguetungsklassen \\
verknüpfte Tabelle(n): & - \\
\end{tabular}

Dieses View liefert eine Liste mit allen in der Tabelle {\tt
verguetungsklassen} verzeichneten Vergütungsklassen:

Rückgabetabelle:

\begin{tabular}{|p{3.8cm}|l|l|p{5.4cm}|}
\hline
Feldname & Datentyp & NW & Bemerkung \\
\hline
\hline
id & INT & Nein & der Vergütungsklasse \\
name & STRING & Nein & der Vergütungsklasse \\
beschreibung & TEXT & Ja & - \\
einkommen & NUM & Ja & Euro pro Jahr \\
\hline
\end{tabular}




\subsection{get\_veroeffentlichungen}

\begin{tabular}{rl}
Haupttabelle(n): & veroeffentlichungen \\
verknüpfte Tabelle(n): & vmedien, \\
& institutionen \\
\end{tabular}

Dieses View liefert eine Liste, welche alle in der Datenbank
gespeicherten Veroeffentlichungen und den zugehörigen Personen
beinhaltet. Diese Liste kann mittels einer where-Klausel schon bei der
Anfrage an die Datenbank auf die Veröffentlichungen eine Person
beschränkt werden.

\newpage
Rückgabetabelle ({\tt get\_veroeffentlichungen}):

\begin{tabular}{|p{3.8cm}|l|l|p{5.4cm}|}
\hline
Feldname & Datentyp & NW & Bemerkung \\
\hline
\hline
id & INT & Nein & der Veröffentlichung \\
bewerber & INT & Nein & ID des Autors(Person) \\
titel & STRING & Nein & - \\
veroeffentlicht & DATUM & Ja & ... am \\
beschreibung & TEXT & Ja & - \\
medium & STRING & Ja & - \\
namezeitschrift & STRING & Ja & - \\
verweis & STRING & Ja & ISBN, Internetadresse \\
auflage & NUM & Ja & Anzahl Verkauft \\
verlag & INT & Ja & ID des Verlages(Institution) \\
verlagname & STRING & Ja & Name des Verlages \\
\hline
\end{tabular}


\subsection{add\_veroeffentlichungen}

\begin{tabular}{rl}
Haupttabelle(n): & veroeffentlichungen \\
verknüpfte Tabelle(n): & vmedien \\
\end{tabular}

Diese Funktion legt einen neuen Veroeffentlichungen-Rekord in der Datenbank an
oder ändert einen bestehenden ab. Die Übergabeparameter entsprechen den
Spalten der Rückgabetabelle des Views {\tt get\_veroeffentlichungen} mit
diesen Unterschieden:

Das Feld {\tt verlagname} entfällt.

Das ID-Feld muss leergelassen werden, wenn eine neue Erfahrung
hinzugefügt und einer Person zugewiesen werden soll. Ist dieses Feld
mit einer Nummer besetzt, so wird der durch diese Nummer
gekennzeichnete Datensatz in der Datenbank (in Tabelle {\tt
veroeffentlichungen}) mit den übergebenden Daten überschrieben.

Ist das Medium (über das veröffentlicht wurde) mit dem Namen {\tt
vmedien} noch nicht in der Datenbank (in Tabelle {\tt vmedien})
eingepflegt, so wird dies nun getan.


\subsection{rem\_veroeffentlichungen}

\begin{tabular}{rl}
Haupttabelle(n): & veroeffentlichungen \\
verknüpfte Tabelle(n): & - \\
\end{tabular}

Diese Funktion entfernt eine Veröffentlichung aus der Datenbank (aus der Tabelle
{\tt veroeffentlichungen}). Der zu löschende Datensatz wird durch den einzigen
Parameter -- ID -- beschrieben.




\subsection{get\_vmedien}

\begin{tabular}{rl}
Haupttabelle(n): & vmedien \\
verknüpfte Tabelle(n): & - \\
\end{tabular}

Dieses View liefert eine Liste mit allen in der Tabelle {\tt vmedien}
verzeichneten Veröffentlichungsmedien:

Rückgabetabelle:

\begin{tabular}{|p{3.8cm}|l|l|p{5.4cm}|}
\hline
Feldname & Datentyp & NW & Bemerkung \\
\hline
\hline
name & STRING & Nein & - \\
\hline
\end{tabular}




\section{Konzepte in der Mehrbenutzerumgebung}

Das erarbeitete Szenario bezieht sich auf eine Umgebung, 
in der mehrere Benutzer auf einen Datenbestand zugreifen.

Während ``normale'' Benutzer (diejenigen, die eine Stelle ausschreiben)
nur lesend auf die eingetragenen Informationen zugreifen,
kann derjenige, der die Stellenausschreibung und die Daten der Bewerber
in die Datenbank einpflegt auch schreibrechte besitzen.
Zusätzlich muss der Administrator sämtliche Rechte auf die Datenbank
besitzen.

Daher sollten für die unterschiedlichen Benutzer, unterschiedliche
Rechte festgelegt werden. 

Ferner kann ggf. über den Einsatz von Transaktionen ein Verfälschen
der Daten verhindert werden,
wenn gleichzeitige Zugriffe auf dieselben Daten gemacht werden. 


\subsection{Sicherheitskonzept}

Es sind drei Benutzergruppen zu identifizieren: ``normale'' Benutzer,
Verwalter und Administratoren. Die Benutzergruppen werden als
``Gruppen'' auf dem SQL-Server realisiert. Hinterher werden die
jeweiligen Rechte auf die Gruppen vergeben. So muss ein entsprechender
Benutzer nur in der jeweiligen Gruppe auf der Datenbank eingetragen
sein.  Die Zuweisung der Rechte direkt auf einem Benutzer wäre zu
unflexibel und zu unsicher.

Das folgende Beispiel bezieht sich exemplarisch auf eine PostgreSQL
Datenbank.


Mit den folgenden SQL-Statements werden die Gruppen auf der Datenbank
angelegt:

{\tt
CREATE GROUP administratoren;\\
CREATE GROUP benutzer;\\
CREATE GROUP Verwalter;\\
}

Mit den folgenden SQL-Statements werden die User auf der Datenbank
angelegt:

{\tt
CREATE USER dab\_admin PASSWORD '****' CREATEUSER CREATEDB IN GROUP\\
\hspace{3cm}administratoren;\\
CREATE USER dab\_benutzer CREATEUSER CREATEDB IN GROUP benutzer;\\
CREATE USER dab\_verwalter CREATEUSER CREATEDB IN GROUP verwalter;\\
}


\subsubsection{Benutzer}

Benutzer haben grundsätzlich nur Leserechte auf alle Sichten.
Sie dürfen nicht direkt neue Datensätze in eine Tabelle einfügen.

Beispiel (exemplarisch):

{\tt
GRANT SELECT ON get\_personen TO GROUP benutzer;
}

Diese Funktion würde eine Übersicht über bestimmte Personen,
die in der Datenbank eingepflegt wurden, anzeigen.

Desweiteren ist darüber nachzudenken, ob alle Benutzer alles lesen
können sollen.  Ein Vorschlag ist, den Benutzer nur jeweils die
Informationen (z.B. Bewerber) lesen zu lassen, die zu einer seinen
Ausschreibungen gehören. So kann vermieden werden, dass Fachbereich A
von den Einstellungen von Fachbereich B erfährt. Dieses Wissen kann
nur missbraucht werden, es gibt keinen Grund diese Information
weiterzugeben.

Stellenausschreibungen gehen grundsätzlich über die Verwaltung, daher
besteht kein Grund, dass der ``normale'' Benutzer schreibend auf die
Daten zugreift.


\subsubsection{Verwalter}

Verwalter müssen eingeschränkte Schreibrechte sowie Leserechte
besitzen, da sie die Daten (Stellenausschreibung und Bewerber) in
die Datenbank einpflegen müssen.


Beispiel (exemplarisch):

{\tt
GRANT SELECT ON get\_personen TO GROUP verwalter;\\
GRANT EXECUTE ON FUNCTION add\_personen (Parameter) TO GROUP\\
\hspace{3cm}verwalter;\\
}

 
\subsubsection{Administrator}

Administratoren haben vollen Zugriff auf alle festgelegten Sichten und
Funktionen.  In Bereichen, in denen Konsistenzprobleme auftreten
können ist der Administrator jedoch gezwungen, die dafür vorgesehenen
Funktionen zu nutzen. Insofern er Datensätze in eine Tabelle einfügen
kann, ohne dass er dafür eine Funktion benutzt, wird davon
ausgegangen, dass der Administrator weiß, was er macht.


\subsection{Transaktionen}

Eine Transaktion nutzt eine Sperre um Änderungen an den Daten durch
andere Benutzer zu verhindern, die gerade durch die Transaktion
bearbeitet werden.  Diese Sperre wird durch das
Datenbankmanagementsystem zur Verfügung gestellt.




\section{Eingabemasken -- Zugriff auf die Datenbank}

Der Benutzer arbeitet mit Eingabemasken die, die eben definierten
Funktionen ausrufen:


\subsection{Einstiegsmaske}


Die Einstiegsmaske könnte die Möglichkeit bieten die folgende
Operationen auszuführen:

\begin{itemize}

\item $\rightarrow$ Stellenausschreibung erstellen, bearbeiten
\item $\rightarrow$ Stellenausschreibung auflisten

\end{itemize}

\subsection{Stellenausschreibungen auflisten}

Eine Tabelle mit allen Stellenausschreibungen erscheint mit der
Möglichkeit einzelne Ausschreibung zu löschen ({\tt
rem\_stellenausschreibungen}) oder die zu bearbeiten $\rightarrow$
{\tt Stellenausschreibung erstellen, bearbeiten}

Des weiteren können Bewerber zu der Stellenausschreibung hinzugefügt
werden ($\rightarrow$ {\tt Bewerbungen erstellen, bearbeiten}) oder
alle bisherigen Bewerber aufgelistet werden ($\rightarrow$ {\tt
Alle Bewerber zu einer Stellenausschreibung auflisten}).

Die Stellenausschreibungen könnten nach Datum sortiert werden, damit
immer die aktuellsten ober stehen (wichtig, falls
Stellenausschreibungen über einen längeren Zeitraum ausbewahrt
werden).


\subsection{Stellenausschreibungen erstellen, bearbeiten}

Diese Maske bietet die Möglichkeit eine Stellenausschreibung
einzugeben. Falls von einer vorherigen Maske eine ID übergeben wurde,
wird die dazugehörige Stellenausschreibung geladen. Es stehen folgende
Eingabefelder zur Verfügung:

{\tt get\_stellenausschreibungen, add\_stellenausschreibungen}:

\begin{itemize}

\item Stellenbezeichnung
\item Stellenbeschreibung
\item Veröffentlicht im
\item Veröffentlicht am
\item Aufgabenfeld
\item Gewünschtes Einstellungsdatum
\item Bewerbungsschluss

\item Vergütungsklasse [Name, Beschreibung, Einkommen]: Die in der Datenbank vorhandenen
Vergütungsklassen [deren Name] können in einer
Pull-Down-Liste ausgewählt werden ({\tt get\_verguetungsklassen}). Ein Button
bietet das Anlegen ({\tt add\_verguetungsklassen}) einer
Vergütungsklasse an.

\item Fachbereich
\item Verantwortlicher
\item Telefonnummer des Verantwortlichen
\item eMail-Adresse der Verantwortlichen
\item Probezeit
\item Befristung
\item Intern
\item Listen mit Soll- und Mussqualifikationen ({\tt get\_qualifikationen\_stellen\-aus}) mit Option zum Löschen
({\tt rem\_qualifikationen\_stellenaus}) und hinzufügen ($\rightarrow$
{\tt Qualifikationen einer Stellenausschreibung hin\-zu\-fügen}).
\item Listen mit Soll- und Mussabschlüssen ({\tt get\_abschluesse\_stellenaus}) mit Option zum Löschen
({\tt rem\_abschluesse\_stellenaus}) und hinzufügen ($\rightarrow$
{\tt Abschluesse einer Stellenausschreibung hinzufügen}).


\end{itemize}

Aktionen:

\begin{itemize}

\item Löschen $\rightarrow$ {\tt rem\_stellenausschreibungen}

\item Stellenausschreibungen auflisten $\rightarrow$ {\tt
Stellenausschreibung auflisten,} {\tt löschen}

\item Zugehörige Bewerber auflisten  $\rightarrow$ {\tt
Alle Bewerber zu einer Stellenaus\-schrei\-bung auflisten}

\end{itemize}


\subsection{Qualifikationen einer Stellenausschreibung hinzufügen}

Bietet die Möglichkeit eine Qualifikationen einer Stellenausschreibung
hinzufügen, entweder als Muss- oder als Soll-Kriterium.

{\tt add\_qualifikationen\_stellenaus}:

\begin{itemize}

\item Auswahlmöglichkeit der Qualifikationen ({\tt get\_qualifikationen})
mit Möglichkeit eine Hinzuzufügen oder zu bearbeiten ($\rightarrow$ {\tt
Qualifikationen hin\-zu\-fügen, bearbeiten})
\item Auswahl Muss- oder Sollkriterium
\item Grad des Könnens (Grundlagen, ... Experte)

\end{itemize}


\subsection{Qualifikationen einer Person hinzufügen}

Bietet die Möglichkeit eine Qualifikationen einer Person
hinzufügen.

{\tt add\_qualifikationen\_personen}:

\begin{itemize}

\item Auswahlmöglichkeit der Qualifikationen ({\tt get\_qualifikationen})
mit Möglichkeit eine Hinzuzufügen oder zu bearbeiten ($\rightarrow$ {\tt
Qualifikationen hin\-zu\-fügen, bearbeiten})
\item Grad des Könnens (Grundlagen, ... Experte)

\end{itemize}


\subsection{Qualifikationen hinzufügen, bearbeiten}

({\tt get\_qualifikationen, add\_qualifikationen})

\begin{itemize}

\item Name der Qualifikation
\item Beschreibung der Qualifikation

\end{itemize}



\subsection{Abschlüsse einer Stellenausschreibung hinzufügen}

Bietet die Möglichkeit Abschlüsse einer Stellenausschreibung
hinzufügen, entweder als Muss- oder als Soll-Kriterium.

{\tt add\_abschluesse\_stellenaus}:

\begin{itemize}

\item Auswahlmöglichkeit der Abschlüsse ({\tt get\_abschluesse})
mit Möglichkeit eine Hinzuzufügen oder zu bearbeiten ($\rightarrow$ {\tt
Abschlüsse hinzufügen, be\-arbeiten})
\item Auswahl Muss- oder Sollkriterium

\end{itemize}


\subsection{Abschlüsse einer Person hinzufügen}

Bietet die Möglichkeit einen Abschluss einer Person
hinzufügen.

{\tt add\_abschluesse\_personen}:

\begin{itemize}

\item Auswahlmöglichkeit der Abschlüsse ({\tt get\_abschluesse})
mit Möglichkeit eine Hinzuzufügen oder zu bearbeiten ($\rightarrow$ {\tt
Abschlüsse hinzufügen, be\-arbeiten})
\item Auswahlmöglichkeit der Institute ({\tt get\_institutionen})
mit Möglichkeit eine Hinzuzufügen oder zu bearbeiten ($\rightarrow$ {\tt
Institutionen hinzufügen, bearbeiten})
\item Erlangt am
\item Durchschnittsnote
\item Dauer in Monaten (Das dem Abschluss vorangehende Studium)

\end{itemize}


\subsection{Abschlüsse hinzufügen, bearbeiten}

({\tt get\_abschluesse, add\_abschluesse})

\begin{itemize}

\item Name der Qualifikation
\item Beschreibung der Qualifikation
\item Regelzeit in Monaten
\item Abschlusstyp -- Die In der Datenbank vorhandenen
Abschlusstypen [deren Name] können in einer
Pull-Down-Liste ausgewählt werden ({\tt get\_abschluss\-typen}). Ein Button
bietet das Anlegen ({\tt add\_abschluss\-typen}) eines
Abschlusstypen an.

\end{itemize}


\subsection{Institutionen hinzufügen, bearbeiten}

({\tt get\_institutionen, add\_institutionen})

\begin{itemize}

\item Name des Instituts
\item Strasse mit Hausnummer
\item PLZ
\item Ort -- hier wird eine Liste angeboten {\tt get\_orte}, es
können auch neue Werte eingegeben werden.
\item Ansprechpartner
\item eMail
\item Telefonnummer
\item Bemerkungen

\end{itemize}


\subsection{Alle Bewerber zu einer Stellenausschreibung auflisten}

Liest die Liste mit allen Bewerbern aus der Datenbank auslesen ({\tt
get\_bewerbun\-gen}). Diese wird mittels einer where-Klausel auf eine
Stellenausschreibung beschränkt. Die Namen und Adressen der Bewerber
werden mittels {\tt get\_personen} geladen. Diese Tabelle wird nun
Angezeigt, dazu werden die Operationen Löschen ({\tt
rem\_bewerbungen}), Bearbeiten und hinzufügen ($\rightarrow$
{\tt Bewerbungen er\-stel\-len, bearbeiten}) bereitgestellt.

Die erste Spalte der Tabelle könnte den Status der Bewerbung
zeigen. Zum Beispiel:

\begin{itemize}

\item rote Box: Noch keine Benachrichtigung versandt. (Absagedatum,
Einladungsdatum und Einstellungsdatum sind leer)
\item orangene Box: Wurde zum Einstellungsgespräch geladen, aber noch
nicht abgesagt oder zugesagt. (Einladungsdatum enthält Datum;
Absagedatum und Einstellungsdatum sind leer)
\item grüne Box: Wurde Eingestellt. (Einladungsdatum enthält
Datum)
\item blaue Box: Wurde Abgesagt. (Absagedatum enthält Datum)

\end{itemize}

Auf Grund dieser Staaten können die jeweils sinnvollen Funktionen für
jede Zeile angeboten werden:

\begin{itemize}

\item Status rot: Drucken/Verschicken Absage, Drucken/Verschicken Einladung
\item Status orange:  Drucken/Verschicken Absage,
Drucken/Verschicken Zusage (Einstellung)
\item Status grün: keine
\item Status blau: keine

\end{itemize}



\subsection{Übersicht Drucken}

Damit man beim Vorstellungsgespräch weiß, mit wem man es zu tun hat,
wird hier eine Übersicht über den Bewerber erstellt und
ausgedruckt. Dieser Ausdruck kann auch etwas Platz für Notizen
enthalten, welche dann nach dem Vorstellungsgespräch in die Datenbank
(Tabelle: {\tt bewerbungen}; Feld: {\tt kommentar}) eingepflegt werden
können.



\subsection{Drucken/Verschicken Absage}

Ein Standart-Absage-Schreiben wird vorgeschlagen und kann gedruckt
werden. Nach Druck wird das Attribut {\tt abgesagt} auf das aktuelle
Datum gesetzt.


\subsection{Drucken/Verschicken Einladung}

Nach Eingabe eines Termins für das Vorstellungsgespräch wird ein
Standart-Einladungs-Schreiben vorgeschlagen und kann gedruckt
werden. Nach Druck wird das Attribut {\tt geladen} und {\tt geladenum}
auf das eingegebene Datum bzw. Zeit gesetzt.


\subsection{Bewerbungen erstellen, bearbeiten}

Diese Maske bietet die Möglichkeit eine Bewerbungen einzugeben. Falls
von einer vorherigen Maske eine ID übergeben wurde, die die
dazugehörige Bewerbungen in die Maske geladen und kann bearbeitet
werden. Dazu sind folgende Eingabefelder vorhanden:

Um die Übersicht zu wahren und der Bewerber zuordnen zu können werden
folgende Werte in der Maske angezeigt, können aber nicht verändert
werden {\tt get\_stellenausschreibungen}:

\begin{itemize}

\item Stellenbezeichnung
\item Stellenbeschreibung
\item Aufgabenfeld
\item Gewünschtes Einstellungsdatum
\item Bewerbungsschluss
\item Vergütungsklasse [Name]
\item Fachbereich
\item Verantwortlicher
\item Telefonnummer des Verantwortlichen
\item eMail-Adresse der Verantwortlichen
\item Intern

\end{itemize}


({\tt get\_personen, add\_personen})

\begin{itemize}

\item Titel
\item Vorname
\item Name
\item Strasse
\item PLZ
\item Ort -- hier wird eine Liste angeboten {\tt get\_orte}, es
können auch neue Werte eingegeben werden. 
\item Telefonnummer Privat
\item Telefonnummer Firma
\item Telefonnummer Mobile
\item eMail
\item Gebdatum
\item Familienstand

\end{itemize}


({\tt get\_bewerbungen, add\_bewerbungen})

\begin{itemize}

\item Eingang
\item Fruhstereinstllungstermin
\item Abgesagt
\item Geladen
\item Geladen\_am
\item Zugesagt
\item Eingestellt
\item Intern
\item Vorrang
\item Medium -- hier wird eine Liste angeboten {\tt get\_bmedien}, es
können auch neue Werte eingegeben werden.
\item Kommentar

\end{itemize}


\begin{itemize}

\item Listen mit Qualifikationen ({\tt get\_qualifikationen\_personen}) mit Option zum Löschen
({\tt rem\_qualifikationen\_personen}) und hinzufügen ($\rightarrow$
{\tt Qualifikationen einer Person hinzufügen}).
\item Listen mit Abschlüssen ({\tt get\_abschluesse\_personen}) mit Option zum Löschen
({\tt rem\_abschluesse\_personen}) und hinzufügen ($\rightarrow$
{\tt Abschluesse einer Person hinzufügen}).
\item Listen mit Erfahrungen ({\tt get\_erfahrungen}) mit Option zum Löschen
({\tt \\rem\_erfahrungen}), hinzufügen und bearbeiten ($\rightarrow$
{\tt Erfahrungen einer Person hinzufügen, bearbeiten}).
\item Listen mit Veröffentlichungen ({\tt get\_veroeffentlichungen}) mit Option zum Löschen
({\tt rem\_veroeffentlichungen}), hinzufügen und bearbeiten ($\rightarrow$
{\tt Veröffentlichungen einer Person hinzufügen, bearbeiten}).

\end{itemize}

Nachdem die Bewerbung in die Datenbank übernommen wurde schlägt das
Programm einen Standart-Brief vor, welcher den Sinn hat dem Bewerber
mitzuteilen, dass seine Bewerbung angekommen ist und bearbeitet wird.


\subsection{Erfahrungen einer Person hinzufügen, bearbeiten}

Bietet die Möglichkeit Erfahrungen einer Person hinzufügen. Falls eine
ID (von der aufrufenden Maske) einer Erfahrung übergeben wird, so wird
diese in die Maske Eingeladen und kann bearbeitet werden.

{\tt get\_erfahrungen, add\_erfahrungen}:

\begin{itemize}

\item Name der Erfahrung
\item Beschreibung
\item Ausland -- hier wird eine Liste angeboten {\tt get\_laender}, es
können auch neue Werte eingegeben werden.
\item Dauer
\item Beendetam
\item Auswahlmöglichkeit der Institute ({\tt get\_institutionen})
mit Möglichkeit eine Hinzuzufügen oder zu bearbeiten ($\rightarrow$ {\tt
Institutionen hinzufügen, bearbeiten})

\end{itemize}



\subsection{Veröffentlichungen einer Person hinzufügen, bearbeiten}

Bietet die Möglichkeit Veröffentlichungen einer Person
hinzufügen. Falls eine ID (von der aufrufenden Maske) einer
Veröffentlichung übergeben wird, so wird diese in die Maske Eingeladen
und kann bearbeitet werden.

{\tt get\_veroeffentlichungen, add\_veroeffentlichungen}:

\begin{itemize}

\item Titel der Veröffentlichung
\item Veröffentlicht am
\item Beschreibung
\item Medium -- hier wird eine Liste angeboten {\tt get\_vmedien}, es
können auch neue Werte eingegeben werden.
\item Namezeitschrift
\item Verweis z.B. ISBN, Internetadresse
\item Auflage -- Anzahl der Verkauften Exemplare
\item Verlag (wird intern als Institutionen abgelegt) Auswahlmöglichkeit der Institute ({\tt get\_institutionen})
mit Möglichkeit eine Hinzuzufügen oder zu bearbeiten ($\rightarrow$
{\tt Institutionen hinzufügen, bearbeiten})

\end{itemize}


\newpage
\section{Beispielimplementierung in PostgreSQL}

{\tiny
\begin{lstlisting}

--dieser View zeigt alle Bewerber die in Bremen wohnen

create view hbwohn as
          select
                   person.name
                   person.ort
          from  person
            where ort  = Bremen   


--dieser View zeigt Ansprechpartner und  Institute von alle Bewerber

create view institutansprech as
           select
                   nr, name, ansprechpartner  
           from institute
           group by nr


--dieser View zeigt alle Bewerber dessen Bewerbungen abgesagt wurde

 create view bewerbungabsag as
           select                  
                    nr , geladen
            from bewerbungen
                where geladen = ja

--dieser View zeigt Bewerber die ihre Ausbildung in der Regelzeit
--geschafft haben und die durchsnitttsnote
create view regelzeit as
           select  vschulabschluessepersonen.durchschnittsnote, 
                      vausbildungpersonen.nr, vausbildungpersonen.name, 
                      vausbildungpersonen. regelausbildungzeitzeit
           from vschulabschluessepersonen, vausbildungpersonen
              where vschulabschluessepersonen.nr = vausbildungpersonen.nr
                and vschulabschluessepersonen.durchschnittsnote >.......
                 and vausbildungpersonen. Regelausbildungzeitzeit = ja
            group by vausbildungpersonen.nr






--dieser View zeigt alle Bewerber die schonmal im Ausland  fuer
--mindestens  ueber 6 Monate gearbeitet haben

create view bewerberausland as
       select
                bewerber, beschreibung ,ausland, dauer
       from  erfahrungen
         where ausland > 1
          and    dauer > 6


--dieser View zeigt alle Stelle die nur im internet veröffentlicht wurde

create view internetveroeff as
       select
                nr, title, veroeffentlicht, medium
       from  vveroeffentlichungenpersonen
         where medium = internet


insert into orte (name) values ('Bremen');
insert into orte (name) values ('Delmenhorst');
insert into orte (name) values ('Oldenburg');
insert into orte (name) values ('Osnabrueck');


insert into personen (familienstand) values ('ledig');
insert into personen (familienstand) values ('verheiratet');
insert into personen (familienstand) values ('geschieden');


insert into stellenaus (fachbereich, verantwortlicher, probezeit) 
            values ('Allgemeinwissenschaftliche Grundlagenfächer', 'Prof. ABC', ' 6 ');

insert into stellenaus (fachbereich, verantwortlicher, probezeit) 
            values ('Architektur', ' Prof. DEF', ' 6 ');

insert into stellenaus (fachbereich, verantwortlicher, probezeit) 
            values ('Bauingenieurwesen', 'GHI', ' 6 ');

insert into stellenaus (fachbereich, verantwortlicher, probezeit) 
            values ('Elektrotech\&Informatik', 'JKL', ' 6 ');

insert into stellenaus (fachbereich, verantwortlicher, probezeit) 
            values ('Maschinenbau' ,' Prof. MNO ', ' 6 ');

insert into stellenaus (fachbereich, verantwortlicher, probezeit) 
            values ('Nautik und Internationale Wirtschaft', ' Prof. PQR', ' 6 ');

insert into stellenaus (fachbereich, verantwortlicher, probezeit) 
         values ('Schiffbau, Meerestechnik und Angewandte Naturwissenschaften', 'Prof. STU', ' 6 ');

insert into stellenaus (fachbereich, verantwortlicher, probezeit) 
            values ('Sozialwesen','Prof. VWX ',  ' 6 ');

insert into stellenaus (fachbereich, verantwortlicher, probezeit) 
            values ('Wirtschaft', 'Prof. XYZ ', ' 6 ');

insert into bewerbungen (name) values ('post');
insert into bewerbungen (name) values ('e-mail');
insert into bewerbungen (name) values ('personliche Abgabe');

insert into abschluesse (name) values ('Diplom');
insert into abschluesse (name) values ('Bachelor');
insert into abschluesse (name) values ('Master');

insert into qualifikationen (name) values ('PhD');

insert into veroeffentlichungen (namezeitschrift) values ('Wesser Kurrier');
insert into veroeffentlichungen (namezeitschrift) values ('Frankfurter Times');

insert into vmedien (name) values ('Fachzeitschrift');
insert into vmedien (name) values ('Internet');
insert into vmedien (name) values ('Zeitung');
insert into vmedien (name) values ('Buch');

insert into laender (name) values ('England');
insert into laender (name) values ('Frankreich'); 
insert into laender (name) values ('Kanada');
insert into laender (name) values ('Schweiz');

\end{lstlisting}
}

\end{document}
