PMG-Bautzen/Datenbankbeleg/Linda
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>SQL</language>
== Thema ==
Dargestellt ist die mögliche Datenbank des Besitzers mehrerer Kinos, der so den Überblick über die gezeigten Filme und sein Personal behält. Dabei ist das Modell idealisiert und damit darauf zugeschnitten, dass die Arbeitnehmer pünktlich erscheinen und auch keine Krankheitsfälle vorliegen, sodass ein Anruf oder ein schriftlicher Kontakt nicht nötig ist.
== Entity-Relationship-Modell ==
[[Bild:ER(ohne_Kunden)n1.jpg|Miniatur|750px]]
== Relationenmodell ==
==== Normalformen ====
=====Erste Normal Form/ENF=====
Nur eine Information pro Feld darf vorhanden sein.
=====Zweite Normal Form/ZNF=====
Die Tabellen sind nach den Kardinalitäten voneinder getrennt und durch Fremdschlüssel verbunden.
=====Dritte Normal Form/DNF=====
Innerhalb der Tabellen darf es nur eine Abhängigkeit von den Primärschlüsseln der Tabellen geben.
Da, meine Datenbank bezüglich des Punktes PLZ dieser Form nicht gerecht wird, ist das Relationenmodell daran angepasst.
==== Umformungsregeln ====
===== Kardinalitäten =====
'''1-1''':Jedem Attribut der Menge A wird genau ein Attribut der Menge B zugeordnet.Beide Tabellen können im Realtionenmodell zusammengefasst werden, da eine direkte Zuordnung möglich ist.
'''1-n''':Jedem Attribut der Menge A werden mehrere Attribute der Menge B zugeordnet, umgekehrt jedoch nur 1 aus B zu einem aus A. In dem Relationenmodell wird der Primärschlüssel der n-Tabelle in der 1-Tabelle als Fremdschlüssel eingefügt
'''n-m''':Jedem Attribut der Menge A können mehrere Attribute der Menge B zugeordnet werden. Bei der Transformation ins Realtionenmodell wird eine neue Tabelle entstehen, in der die Primärsschlüssel der n- & m-Tabelle als Fremdschlüssel, wahlweise auch als doppelter Primärschlüssel, eingefügt sind.
==== Modell ====
Personal('''P_NR''';''K_NR'';Vorname;Name;Gehalt;Aufgabenbereich)
Kino('''K_NR''';''PLZ'';Straße;Hausnummer)
PLZ('''PLZ''';Ort)
zeigt(''F_NR'';''K_NR'';ab, bis)
Film ('''F_NR''';Titel,Regisseur)
Darsteller(''F_NR'';D_1;D_2;D_3)
'''Fett: '''Primärschlüssel
''Kursiv:'' Fremdschlüssel
== Datenbank ==
<code id="4d245c89108c7">
Drop table if exists Personal;
create table Personal(
P_NR integer,
K_NR integer,
Vorname varchar(50),
Nachname varchar(50),
Aufgabenbereich varchar(50),
Gehalt decimal(10,2));
INSERT INTO personal VALUES (00001,00003,'Heinz','Schuhmann','Popcornverkäufer',1172.34);
INSERT INTO personal VALUES (00112,00006,'Antje','Schuhmann','Eisverkäufer',1602.03);
INSERT INTO personal VALUES (00456,00007,'Waltraud','Lorenz','Reinigungskraft',2984.73);
INSERT INTO personal VALUES (23651,00003,'Simone','Schmidt','Kassierer',1843.67);
INSERT INTO personal VALUES (79037,00005,'Rudolf','Kunze','Kassierer',1097.94);
Drop table if exists Kino;
create table Kino(
K_NR integer,
Straße varchar(50),
Hausnumer integer,
PLZ integer,
);
INSERT INTO Kino VALUES (00003,'Hansestraße',3,02625);
INSERT INTO Kino VALUES (00004,'Lindenalle',97,10117);
INSERT INTO Kino VALUES (00005,'am Stadion',99,07629);
INSERT INTO Kino VALUES (00006,'Müllerstraße',12,07743);
INSERT INTO Kino VALUES (00007,'Enderstraße',18,01067);
Drop table if exists PLZ;
create table PLZ(
PLZ integer,
Ort varchar(50));
INSERT INTO PLZ VALUES (02625,'Bautzen');
INSERT INTO PLZ VALUES (10117,'Berlin');
INSERT INTO PLZ VALUES (07629,'Hermsdorf');
INSERT INTO PLZ VALUES (07743,'Jena');
INSERT INTO PLZ VALUES (01067,'Dresden');
Drop table if exists zeigt;
create table zeigt(
K_NR integer,
F_NR integer,
ab varchar(10),
bis varchar(10));
INSERT INTO zeigt VALUES (00007,00012,'3.1.2010','29.2.2010');
INSERT INTO zeigt VALUES (00004,00019,'12.4.2010','16.6.2010');
INSERT INTO zeigt VALUES (00003,00023,'23.8.2010','28.9.2010');
INSERT INTO zeigt VALUES (00005,00012,'17.4.2010','23.8.2010');
INSERT INTO zeigt VALUES (00007,00017,'7.10.2010','17.11.2010');
Drop table if exists Film;
create table Film(
F_NR integer,
Titel varchar(50),
Regisseur varchar(50));
INSERT INTO Film VALUES (00012,'Inception','Christopher Nolan');
INSERT INTO Film VALUES (00019,'Avatar-Aufbruch nach Pandora','James Cameron');
INSERT INTO Film VALUES (00023,'Lord of War','Andrew Niccol');
INSERT INTO Film VALUES (00017,'Hitman','Xavier Gens');
INSERT INTO Film VALUES (00018,'Schweigen der Lämmer','Jonathan Demme');
Drop table if exists Darsteller;
create table Darsteller(
F_NR integer,
D_1 varchar(50),
D_2 varchar(50),
D_3 varchar(50));
INSERT INTO Darsteller VALUES (00012,'Leonardo Dicaprio','Ellen Page','');
INSERT INTO Darsteller VALUES (00019,'Sam Worthington','Zoë Saldaña','Sigourney Weaver');
INSERT INTO Darsteller VALUES (00023,'Nicolas Cage','Bridget Moynahan','Jared Leto');
INSERT INTO Darsteller VALUES (00017,'Timothy Olyphant','','');
INSERT INTO Darsteller VALUES (00018,'Anthony Hopkins','Jodie Forster','');
</code>
== Abfragen ==
Für den Fall, dass der Kinobesitzer wissen möchte, welche Leute er ausbeutet und was im Vergleich dazu die Putzfrau bekommt,und wer nun am schlechtesten von allen dran ist, könnte er folgende Abfrage starten:
<run id="4d245c8910a3e">
select * from personal where Aufgabenbereich='Reinigungskraft' or Gehalt<1500.00 order by Gehalt desc;
</run>
Wenn er wissen möchte, wo denn der Film, den er unbedingt auch in einem seiner Kinos anschauen will, läuft, und wer das ganze inszeniert hat, kann er folgendes seiner Datenbank entlocken:
<run id="4d40007114d32">
select regisseur,titel,ort from film,kino,zeigt,PLZ where titel='Hitman' and Film.F_NR=zeigt.F_NR and zeigt.K_NR=Kino.K_NR
and Kino.PLZ=PLZ.PLZ;
</run>
Da seine Frau ja ein unheimlicher Dicaprio Fan ist, muss er schließlich noch nachschauen, wie der Film hieß, in dem er mal wieder seinen Charme versprüht hatte.
<run id="4d4007300f813">
select D_1,D_2,Titel from darsteller,film where (D_1='Leonardo Dicaprio' or D_2='Leonardo Dicaprio' or D_3='Leonardo Dicaprio')
and Darsteller.F_NR=Film.F_NR;
</run>
== Fazit ==
Auch wenn vier Leute aufgrund dieser Datenbank ausgebeutet werden, und das viele Arbeitgeber schon entzücken würde, ist diese Datenbank dennoch verbesserungswürdig. Man könnte noch die Anschrift und Telefonnummer beifügen, so wie vielleicht eine Extratabelle zum Urlaub oder der Unpünktlichkeit, eine zur Kundenzufriedenheit, und welche Filme am beliebtesten waren.
Doch da die Realität wie immer viel zu komplex ist, um sie in einem Modell gut abzubilden denke ich, dass diese Datenbank hinreichend gut ist um wenigstens einige Minimalinformationenentnehmen zu können.