125 lines
5.0 KiB
TeX
125 lines
5.0 KiB
TeX
\section{Normalformen}
|
|
\subsection{1. Normalform}
|
|
Jedes Attribut der Relation muss einen atomaren Wertebereich haben, und die Relation muss frei von Wiederholungsgruppen sein. \\
|
|
\texttt{Atomar} bedeutet, dass ein Attribut nur eine Information enthalten darf, also dürfen bspw. Straße und Hausnummer nicht in einem Attribut gespeichert werden,
|
|
sondern müssen aufgeteilt werdenn.\\
|
|
Mit \texttt{Wiederholdungsgruppen} sind zum einen wiederholende Werte in einer Spalte gemeint (also bspw. in der Spalte Ort mehrmals der Wert Kirchheim) und zum anderen
|
|
sich wiederholende Spalten (bspw. Spalten Standort1, Standort2, Standort3). \\
|
|
|
|
Durch diese Normalform werden Abfragen der Datenbank überhaupt erst möglich gemacht. Ohne atomare Daten könnte nicht jeder Aspekt der Daten einzeln abgefragt werden.
|
|
|
|
\subsection{2. Normalform}
|
|
1. Normalform muss erfüllt sein. Ein Nichtprimärattribut darf nicht funktional von einer Teilmenge eines Schlüsselkandidaten abhängen. \\
|
|
Das bedeutet: Attribute die nur von einem Teil eines Schlüssels und nicht von allen Schlüsseln in einer Tabelle (bei zusammengesetzten Schlüsseln)
|
|
abhängig sind müssen ausgelagert werden, damit sie voll abhängig von ihrem Schlüssel werden. \\
|
|
|
|
Durch diese Normalform modelliert jede Relation nur einen Sachverhalt.
|
|
|
|
\subsection{3. Normalform}
|
|
2. Normalform muss erfüllt sein. Kein Nichtschlüsselattribut darf transitiv von einem Schlüsselkandidaten abhängig sein. \\
|
|
Das bedeutet: Wenn aus einem Attribut ein anderes Attribut ersichtlich wird, welches aber nicht durch den Schlüssel ersichtlich wird,
|
|
ist es transitiv von dem ersten Attribut anhängig. \\
|
|
Bsp.:
|
|
%
|
|
\begin{tabular}{| l | l | l | l |}
|
|
CD\_ID & Albumtitel & Interpret & Gründungsjahr \\
|
|
\hline
|
|
1 & Not That Kind & Anastacia & 1999 \\
|
|
2 & Wish you were here & Pink Floyd & 1965 \\
|
|
3 & Freak of Nature & Anastacia & 1999 \\
|
|
\end{tabular} \\
|
|
%
|
|
Das Gründungsjahr ist durch den Interpreten ersichtlich und nicht durch die CD\_ID. Das heißt, Interpret und Gründungsjahr sollten in eine Tabelle ausgelagert werden.
|
|
|
|
\section{SQL Befehle}
|
|
\subsection{Tabelle erstellen}
|
|
\begin{lstlisting}[frame=single]
|
|
CREATE TABLE tabellenname
|
|
(id INT NOT NULL AUTO_INCREMENT,
|
|
wert VARCHAR(255) NOT NULL, PRIMARY (id));
|
|
\end{lstlisting}
|
|
|
|
\subsection{Werte eintragen}
|
|
\begin{lstlisting}[frame=single]
|
|
INSERT INTO tabellenname (id, wert)
|
|
VALUES (1, 'Test');
|
|
\end{lstlisting}
|
|
|
|
\subsection{Bestehende Werte ändern}
|
|
\begin{lstlisting}[frame=single]
|
|
UPDATE tabellenname
|
|
SET wert = 'Update TEST'
|
|
WHERE id = 1;
|
|
\end{lstlisting}
|
|
|
|
\subsection{Werte aus Tabelle löschen}
|
|
\begin{lstlisting}[frame=single]
|
|
DELETE FROM tabellenname
|
|
WHERE id = 1;
|
|
\end{lstlisting}
|
|
|
|
\subsection{Komplette Tabelle löschen}
|
|
\begin{lstlisting}[frame=single]
|
|
DROP tabellenname;
|
|
\end{lstlisting}
|
|
|
|
\subsection{Alle Werte aus Tabelle löschen}
|
|
\begin{lstlisting}[frame=single]
|
|
TRUNCATE tabellenname;
|
|
\end{lstlisting}
|
|
|
|
\subsection{Werte anzeigen}
|
|
\subsubsection{Alle anzeigen}
|
|
\begin{lstlisting}[frame=single]
|
|
SELECT * FROM tabellenname;
|
|
\end{lstlisting}
|
|
|
|
\subsubsection{Nur bestimmte Spalten anzeigen}
|
|
\begin{lstlisting}[frame=single]
|
|
SELECT werte FROM tabellenname;
|
|
\end{lstlisting}
|
|
|
|
\subsubsection{Spalten Beschriftungen}
|
|
\begin{lstlisting}[frame=single]
|
|
SELECT werte AS "Text"
|
|
FROM tabellenname;
|
|
\end{lstlisting}
|
|
|
|
\subsubsection{Zeilen zählen}
|
|
Bei 3 Einträgen in Werte:
|
|
\begin{lstlisting}[frame=single]
|
|
SELECT COUNT(werte) AS "Anzahl Texte"
|
|
FROM tabellenname;
|
|
\end{lstlisting}
|
|
Ergebnis: Anzahl Texte 3
|
|
|
|
\subsubsection{Werte aufsummieren}
|
|
Angenommen die Tabelle enthält in der Spalte anzahl
|
|
die Werte: 1, 3, 3, 7
|
|
\begin{lstlisting}[frame=single]
|
|
SELECT SUM(anzahl) AS "Summe Anzahl"
|
|
FROM tabellenname;
|
|
\end{lstlisting}
|
|
Ergebnis wäre dann: Summe Anzahl 14
|
|
|
|
\subsubsection{Weitere Rechenfunktionen}
|
|
Außer COUNT() und SUM() gibt es noch:
|
|
\begin{itemize}
|
|
\item AVG: Average, Durchschnitt über Werte bilden
|
|
\item MIN: Den kleinsten Wert ausgeben
|
|
\item MAX: Den größten Wert ausgeben
|
|
\item ROUND(spalte, dezimalstellen): Gerundete Werte ausgeben
|
|
\end{itemize}
|
|
|
|
|
|
\subsubsection{Werte miteinander verrechnen}
|
|
Angenommen die Tabelle enthält in der Spalte anzahl
|
|
die Werte: 4, 2 und in der Spalte preis die Werte
|
|
5, 4.
|
|
\begin{lstlisting}[frame=single]
|
|
SELECT (anzahl * preis) AS "Preis gesamt"
|
|
FROM tabellenname;
|
|
\end{lstlisting}
|
|
Die Ergebnisse wären dann: 20, 8
|
|
|