PMG2426 4/DB Beleg/Greta

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

'''Datenbank-Projekt:'''

== Grundlagen der Datenbank == 

===[[Themenbegründung]]===
 Die Datenbank soll die Verwaltung von Schülern, Lehrern und Kursen in der gymnasialen Oberstufe einer Schule unterstützen.​
 Sie speichert, welche Schüler welche Kurse belegen, welche Lehrkraft einen Kurs unterrichtet und welche Note ein Schüler in einem Kurs erhält.
 Dadurch können typische Auswertungen durchgeführt werden, zum Beispiel: alle Kurse eines Schülers, alle Schüler eines Kurses oder die Notenübersicht für eine Lehrkraft.


===[[Grundlagen]]===
[[Datenbasis:]] Datenmaterial, strukturierte Daten

[[Datenbankmanagementsystem (DBMS):]] dient der Sortierung und Verwaltung von Daten

[[Datenbank:]] Datenbasis und Datenbankmanagementsystem (DBMS) in Verbindung


===[[Kardinalitäten]]===
1:1-Beziehung: Jeder Entität der Entitymenge A wird genau eine Entität der Entitymenge B zugeordnet und umgekehrt.

1:n-Beziehung: Jeder Entität der Entitymenge A können mehrere Entitäten der Entitymenge B zugeordnet werden, umgekehrt kann jedoch jeder Entität der Menge B nur genau eine Entität der Menge A zugeordnet werden.

m:n-Beziehung: Jeder Entität der Entitymenge A können mehrere Entitäten der Entitymenge B zugeordnet werden und umgekehrt.


===[[Normalformen]]===
ENF/1NF - Erste Normalform: jeder Spalte wird nur eine Information zugeordnet. Dadurch werden erst Abfragen ermöglicht, da es keine Komplikationen bei der Suche gibt.

ZNF/2NF - Zweite Normalform: simultane Aufteilung der Entitäten und Entitymengen in Tabellen. Jede Relation modelliert nur einen Sachverhalt. Das Verständnis der Datenbank Strukturen wird so erleichtert. Außerdem wird Redundanz (Dopplungen) vermieden.


===[[Entity Relationship Modell]]===
[[Bild:Aterg_RM.jpg]]

===[[Transformation in das Relationenmodell ]]===
Aus dem ERM ergeben sich folgende Relationen (Tabellen):
-> Primärschlüssel unterstrichen

* SCHUELER (schueler_id, vorname, nachname, stufe)

* LEHRER(lehrer_id, vorname, nachname, kuerzel)

* KURS(kurs_id, fach, art, bezeichnung, lehrer_id)


== Datenbank == 
===[[Tabellenerstellung und Füllung]]===
<code id="52dcdf16795a2">
DROP TABLE IF EXISTS SCHUELER;
DROP TABLE IF EXISTS LEHRER;
DROP TABLE IF EXISTS KURS;

CREATE TABLE SCHUELER (
  schueler_id  VARCHAR(255),
  vorname      VARCHAR(255),
  nachname     VARCHAR(255),
  stufe        INTEGER,
  PRIMARY KEY (schueler_id)
);

CREATE TABLE LEHRER (
  lehrer_id  VARCHAR(255),
  vorname    VARCHAR(255),
  nachname   VARCHAR(255),
  kuerzel    VARCHAR(255),
  PRIMARY KEY (lehrer_id)
);

CREATE TABLE KURS (
  kurs_id     VARCHAR(255),
  fach        VARCHAR(255),
  art         VARCHAR(255),
  bezeichnung VARCHAR(255),
  PRIMARY KEY (kurs_id)
);

INSERT INTO SCHUELER VALUES ('S001', 'Anna',   'Becker',   11);
INSERT INTO SCHUELER VALUES ('S002', 'Lukas',  'Fischer',  11);
INSERT INTO SCHUELER VALUES ('S003', 'Mira',   'Klein',    12);
INSERT INTO SCHUELER VALUES ('S004', 'Jonas',  'Hoffmann', 12);
INSERT INTO SCHUELER VALUES ('S005', 'Sara',   'Wagner',   13);

INSERT INTO LEHRER VALUES ('L001', 'Maria',  'Meyer',   'MM');
INSERT INTO LEHRER VALUES ('L002', 'Thomas', 'Schulz',  'TS');
INSERT INTO LEHRER VALUES ('L003', 'Julia',  'Hartmann','JH');

INSERT INTO KURS VALUES ('K001', 'Mathematik', 'LK', 'M-LK11-1');
INSERT INTO KURS VALUES ('K002', 'Deutsch',    'GK', 'D-GK11-1');
INSERT INTO KURS VALUES ('K003', 'Biologie',   'GK', 'B-GK12-1');
INSERT INTO KURS VALUES ('K004', 'Geschichte', 'GK', 'G-GK12-1');

</code>

=Abfragen=
<u>Ausgabe aller Schüler mit Vorname und Nachname</u>
<run id="52f89f4ff177a">
SELECT vorname, nachname
FROM SCHUELER;
</run>

<u>Ausgabe aller Kurse mit Fach und Kursbezeichnung</u>
<run id="52f89f4ff1818">
SELECT fach, bezeichnung
FROM KURS;
</run>

<u>Ausgabe aller Lehrer mit Kürzel</u>
<run id="52f89f4ff1818">
SELECT vorname, nachname, kuerzel
FROM LEHRER;
</run>

<u>Ausgabe aller Schüler einer bestimmten Stufe (z.B. Jahrgang 12)</u>
<run id="52f89f4ff1818">
SELECT vorname, nachname, stufe
FROM SCHUELER
WHERE stufe = 12;
</run>

<u>Ausgabe aller Leistungskurse (art = 'LK') mit Fach und Bezeichnung</u>
<run id="52f89f4ff1818">
SELECT fach, bezeichnung
FROM KURS
WHERE art = 'LK';
</run>

<u>Ausgabe aller Lehrer, deren Nachname mit „M“ beginnt</u>
<run id="52f89f4ff1818">
SELECT vorname, nachname, kuerzel
FROM LEHRER
WHERE nachname LIKE 'M%';
</run>

<u>Ausgabe der Anzahl der Schüler pro Stufe</u>
<run id="52f89f4ff1818">
SELECT stufe,
COUNT(*) AS anzahl_schueler
FROM SCHUELER
GROUP BY stufe;
</run>

<u>Ausgabe der verschiedenen Kursarten (ohne Wiederholung)</u>
<run id="52f89f4ff1818">
SELECT DISTINCT art
FROM KURS;
</run>

== kritische Reflexion zur Modellierung und Umsetzung ==