PMG1719/DB Beleg/Lenny
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>SQL</language> <h2>Ziel der Datenbank</h2> Das Ziel meiner Datenbank ist es, eine Orientierungshilfe für die Studienplatzwahl zu sein. Dabei werden viele Faktoren rund ums Studium aufgegriffen, was bedeutet, dass durch komplexe und gezielte Abfragen, genau die Studiengänge angezeigt werden, die für jeden individuell relevant sind. Um das zu erreichen, arbeite ich mit 3 Entitäten, welche Hauptmerkmale eines späteren Studiums darstellen. Dazu zählt die '''Hochschule''' an der man studieren will, die angebotenen '''Studiengänge''' und das Umfeld der Hochschule, der '''Standort'''. Natürlich kann die Fülle an Hochschulen und die noch größere Anzahl an Studiengängen nicht als Datenbank für diesen Beleg dienen. Deshalb habe ich eine Auswahl an Hochschulen und Studiengängen getroffen, um die Funktionsweise der Datenbank zu gewährleisten, aber den Rahmen nicht zu sprengen. Beispiele für eine mögliche Anwendung der Datenbank bringt die Tabelle '''Schüler'''. In dieser Tabelle sind fiktive Personen mit fiktiven Eigenschaften aufgelistet, die alle in Bautzen wohnen und auf der Suche nach einem Studienplatz sind. Mit geeigneten Abfragen kann man Interessen und finanzielle Umstände der Schüler mit der Datenbank abgleichen und so den besten Studiengang für jeden individuell herausfinden. Ich habe dieses Thema ausgewählt, da ich mich selbst bereits intensiv mit der Studienplatzwahl auseinandergesetzt habe und es dabei oftmals schwierig war, auf den verschiedenen Hochschulseiten die wichtigen Informationen herauszufinden. Deshalb ist es sinnvoll, die Suche nach dem richtigen Studiengang auf die wichtigsten Informationen - z.B. in Form einer Datenbank - zuzuschneiden. Dieses Prinzip ist bereits als Webseite ([https://www.studycheck.de studycheck.de]) verwirklicht, die auch viele nützliche Informationen für meine Datenbank bereitstellte. <h2>Modelle</h2> <h3>ER-Modell</h3> [[Bild:ER_Modell.png | 1000px]] <h3>Relationenmodell</h3> [[Bild:Relationenmodell.png]] <h3>Erläuterung der Modelle</h3> <p>'''ER-Modell:'''</p> <p>Das ER-Modell besteht aus '''Entitäten''', die dir Oberbegriffe für Tabellen darstellen können, '''Beziehungen''', die diese Entitäten verknüpfen und '''Attribute''', die die Eigenschaften der Entitäten darstellen und Datenfelder der Datenbank sind. Die Entität '''Hochschule''' ist über die Beziehung '''Liegt in''' mit der Tabelle '''Standort''' verknüpft. Gleichermaßen ist Hochschule auch über die Beziehung '''Bietet an''' mit der Tabelle '''Studiengang''' verknüpft. Die Entität '''Schüler''' steht in keiner direkten Beziehung zu den anderen Entitäten.</p> <p>Hochschule und Studiengang sind mit einer '''1:n-Beziehung''' verknüpft, d.h. eine Hochschule kann mehrere Studiengänge anbieten, aber ein Studiengang kann nur von einer Hochschule angeboten werden.</p> <p>Hochschule und Standort sind über eine '''n:m-Beziehung''' verknüpft, d.h. eine Hochschule kann an mehreren Standorten liegen und ein Standort kann mehrere Hochschulen beherbergen.</p> <p>'''Relationenmodell:'''</p> <p>Um das ER-Modell in ein Relationenmodell zu übertragen, muss jede Entität in eine Tabelle umgewandelt werden. Außerdem muss darauf geachtet werden, dass bei einer 1:n-Beziehung ein Fremdschlüssel als Datenfeld eingefügt werden muss, in diesem speziellen Fall muss in '''Studiengang''' der Primärschlüssel von '''Hochschule''' als Fremdschlüssel eingetragen werden.</p> <p>Für die n:m-Beziehung zwischen Standort und Hochschule muss als Relation im eine neue Tabelle '''Liegt in''' zwischen Standort und Hochschule erstellt werden, die von beiden den Primärschlüssel beinhaltet.</p> <p>'''Gewährleistung der Normalisierung'''</p> <p>Die Normalisierung meiner Datenbank ist durch die Beachtung der 3 Normalformen gewährleistet. Die Tabelle ist nach der ersten Normalform so zerlegt, dass in jedem Feld nur eine Information steht. Die Primärschlüssel der jeweiligen Tabellen sind anch der zweiten Normalform eindeutig zuzuordnen. Es erfolgt eine Aufsplittung in Tabellen und Verknüpfungen. Auch die dritte Normalform ist gewährleistet, da es keine Datenfelder gibt, die Abhängigkeiten zu anderen Datenfeldern in derselben Tabelle haben.</p> <h2>Umsetzung der Datenbank</h2> Erstellen der Struktur der Datenbank mit 5 Tabellen: <popup name="Tabellenstruktur"> <code id="5c383be27b057"> CREATE TABLE Hochschule( hochschul_id INTEGER, hochschul_name VARCHAR(255), studenten_zahl INTEGER, PRIMARY KEY(hochschul_id) ); CREATE TABLE Standort( standort_id INTEGER, standort_name VARCHAR(255), bundesland_name VARCHAR(255), einwohner_zahl INTEGER, mietpreis FLOAT(5), entfernung INTEGER, PRIMARY KEY(standort_id) ); CREATE TABLE Studiengang( studiengang_id INTEGER, hochschul_id INTEGER, studiengang_name VARCHAR(255), bewertung FLOAT(3), semester_zahl INTEGER, semester_typ VARCHAR(255), abschluss VARCHAR(255), fakultaet VARCHAR(255), PRIMARY KEY(studiengang_id) ); CREATE TABLE Liegt_in( hochschul_id INTEGER, standort_id INTEGER ); CREATE TABLE Schueler( schueler_id INTEGER, name VARCHAR(255), vorname VARCHAR(255), interesse VARCHAR(255), finanzen FLOAT(5), PRIMARY KEY(schueler_id) ); </code> </popup> Einfügen von Datensätzen in die Datenbank: <popup name="Datensätze"> <code id="5c3b3aab93c94"> INSERT INTO Hochschule VALUES (0, 'HTW Dresden', 4856), (1, 'Hochschule Zittau/Görlitz', 3017), (2, 'Hochschule Stralsund', 2173), (3, 'Hochschule Harz', 2965), (4, 'Berufsakademie Bautzen', 640), (5, 'Hochschule Hof', 3464), (6, 'Hochschule Mittweida', 6350), (7, 'TU Bergakademie Freiberg', 5502), (8, 'HTWK Leipzig', 6400), (9, 'Uni Leipzig', 30226), (10, 'TU Dresden', 33506), (11, 'TU Chemnitz', 10631), (12, 'Uni Potsdam', 20819), (13, 'Hochschule Trier', 8025); INSERT INTO Studiengang VALUES (0, 0, 'Informatik', 4.0, 6, 'Wintersemester', 'Bachelor of Science', 'Informatik/Mathematik'), (1, 0, 'Produkt und Kommunikation', 4.2, 6, 'Wintersemester', 'Bachelor of Arts', 'Design'), (2, 0, 'Bauingenieurwesen', 3.9, 2, 'Wintersemester', 'Master of Science', 'Bauingenieurwesen'), (3, 0, 'Medieninformatik', 3.7, 8, 'Wintersemester', 'Diplom', 'Informatik/Mathematik'), (4, 0, 'Gartenbau', 3.6, 7, 'Wintersemester', 'Bachelor of Science', 'Landbau/Umwelt/Chemie'), (5, 1, 'Automatisierung/Mechatronik', 4.5, 7, 'Wintersemester', 'Bachelor of Science', 'Elektrotechnik und Informatik'), (6, 1, 'Informatik', 4.3, 6, 'Wintersemester', 'Bachelor of Science', 'Elektrotechnik und Informatik'), (7, 1, 'Kommunikationspsychologie', 3.8, 7, 'Wintersemester', 'Bachelor of Arts', 'Sozialwissenschaften'), (8, 1, 'Wirtschaftsingenieurwesen', 4.2, 8, 'Wintersemester', 'Diplom', 'Wirtschaftswissenschaften und Wirtschaftsingenieurwesen'), (9, 1, 'Wirtschaft und Sprachen', 4.2, 8, 'Wintersemester', 'Bachelor of Arts', 'Management und Kulturwissenschaften'), (10, 2, 'Betriebswirtschaftslehre', 3.9, 7, 'Wintersemester', 'Bachelor of Arts', 'Wirtschaft'), (11, 2, 'Wirtschaftsinformatik', 4.3, 7, 'Wintersemester', 'Bachelor of Science', 'Wirtschaft'), (12, 2, 'Wirtschaftsinformatik', 4.2, 3, 'Sommer- & Wintersemester', 'Master of Science', 'Wirtschaft'), (13, 3, 'Smart Automation', 4.5, 7, 'Wintersemester', 'Bachelor of Engineering', 'Automatisierung und Informatik'), (14, 3, 'Medien- und Spielekonzeption', 4.3, 4, 'Sommer- & Wintersemester', 'Master of Arts', 'Automatisierung und Informatik'), (15, 3, 'Medieninformatik', 4, 7, 'Wintersemester', 'Bachelor of Science', 'Automatisierung und Informatik'), (16, 4, 'Finanzmanagement', NULL, 6, 'Wintersemester', 'Bachelor of Arts', NULL), (17, 4, 'Medizintechnik', NULL, 6, 'Wintersemester', 'Bachelor of Engineering', NULL), (18, 4, 'Wirtschaftsinformatik', 4, 6, 'Wintersemester', 'Bachelor of Science', NULL), (19, 5, 'Verwaltungsinformatik', 3.4, 6, 'Wintersemester', 'Diplom', 'Informatik'), (20, 5, 'Informatik', 4.7, 7, 'Wintersemester', 'Bachelor of Science', 'Informatik'), (21, 5, 'Innovative Textilien', 4.2, 7, 'Wintersemester', 'Bachelor of Engineering', 'Ingenieurwissenschaften'), (22, 6, 'Angewandte Informatik', 3, 6, 'Wintersemester', 'Bachelor of Science', 'Angewandte Computer- und Biowissenschaften'), (23, 6, 'Angewandte Medien', 3.7, 6, 'Sommer- & Wintersemester', 'Bachelor of Arts', 'Medien'), (24, 6, 'Biotechnologie', 3.8, 6, 'Wintersemester', 'Bachelor of Science', 'Angewandte Computer- und Biowissenschaften'), (25, 7, 'Chemie', 4.3, 6, 'Sommer- & Wintersemester', 'Bachelor of Science', 'Mathematik, Informatik & Naturwissenschaften'), (26, 7, 'Geophysik', NULL, 4, 'Sommer- & Wintersemester', 'Master of Science', 'Geowissenschaften, Geotechnik und Bergbau'), (27, 7, 'Angewandte Informatik', 4.5, 6, 'Sommer- & Wintersemester', 'Bachelor of Science', 'Mathematik und Informatik'), (28, 8, 'Architektur', 3.5, 6, 'Wintersemester', 'Master of Science', 'Architektur und Sozialwissenschaften'), (29, 8, 'Soziale Arbeit', 3.8, 6, 'Wintersemester', 'Bachelor of Arts', 'Architektur und Sozialwissenschaften'), (30, 8, 'Energie-, Gebäude- und Umwelttechnik', 2.5, 4, 'Wintersemester', 'Master of Engineering', 'Maschinenbau und Energietechnik'), (31, 9, 'Informatik', 4, 6, 'Wintersemester', 'Bachelor of Science', 'Informatik und Mathematik'), (32, 9, 'Journalismus', 3.7, 6, 'Wintersemester', 'Master of Arts', 'Sozialwissenschaften'), (33, 9, 'Mathematik', 4.2, 10, 'Wintersemester', 'Diplom', 'Informatik und Mathematik'), (34, 10, 'Bahnsystemingenieurwesen', 4.1, 4, 'Wintersemester', 'Master of Science', 'Verkehrswissenschaften'), (35, 10, 'Englisch (Lehramt)', 3.7, 10, 'Wintersemester', 'Staatsexamen', 'Sprach-, Literatur- und Kulturwissenschaften'), (36, 10, 'Elektrotechnik', 4.1, 10, 'Wintersemester', 'Diplom', 'Elektrotechnik und Informationstechnik'), (37, 11, 'Angewandte Informatik', 3.7, 6, 'Wintersemester', 'Bachelor of Science', 'Informatik'), (38, 11, 'Digitale Medien- und Kommunikationskulturen', 3.4, 4, 'Wintersemester', 'Master of Arts', 'Philosophie'), (39, 11, 'Germanistik', 3.9, 6, 'Wintersemester', 'Bachelor of Arts', 'Philosophie'), (40, 12, 'Informatik / Computational Science', 3.4, 6, 'Wintersemester', 'Bachelor of Science', 'Mathematik und Naturwissenschaften'), (41, 12, 'Physik', 4, 6, 'Wintersemester', 'Bachelor of Science', 'Mathematik und Naturwissenschaften'), (42, 12, 'Politik und Wirtschaft', 4, 6, 'Wintersemester', 'Bachelor of Science', 'Wirtschafts- und Sozialwissenschaften'), (43, 13, 'Angewandte Informatik', 3.2, 7, 'Sommer- & Wintersemester', 'Bachelor of Science', 'Informatik'), (44, 13, 'Kommunikationsdesign', 3.8, 6, 'Sommer- & Wintersemester', 'Bachelor of Arts', 'Gestaltung'), (45, 13, 'Informatik', NULL, 6, 'Sommer- & Wintersemester', 'Bachelor of Science', 'Informatik'); INSERT INTO Standort VALUES (0, 'Dresden', 'Sachsen', 543825, 8.29, 64), (1, 'Zittau', 'Sachsen', 28906, 4.13, 50), (2, 'Görlitz', 'Sachsen', 55928, 4.81, 51), (3, 'Stralsund', 'Mecklenburg-Vorpommern', 59517, 7.98, 501), (4, 'Wernigerode', 'Brandenburg', 35041, 6.8, 311), (5, 'Halberstadt', 'Brandenburg', 43224, 5.08, 295), (6, 'Bautzen', 'Sachsen', 40798, 6.22, 0), (7, 'Hof', 'Bayern', 47275, 5.74, 235), (8, 'Münchberg', 'Bayern', 11087, 5.74, 253), (9, 'Mittweida', 'Sachsen', 15907, 6.15, 116), (10, 'Freiberg', 'Sachsen', 41823, 7.35, 107), (11, 'Leipzig', 'Sachsen', 560472, 10.43, 169), (12, 'Chemnitz', 'Sachsen', 246353, 5.16, 133), (13, 'Potsdam', 'Brandenburg', 171810, 10.77, 244), (14, 'Trier', 'Rheinland-Pfalz', 114914, 8.67, 691), (15, 'Idar-Oberstein', 'Rheinland-Pfalz', 31082, 5.47, 631); INSERT INTO Liegt_in VALUES (0, 0), (1, 1), (1, 2), (2, 3), (3, 4), (3, 5), (4, 6), (5, 7), (5, 8), (6, 9), (7, 10), (8, 11), (9, 11), (10, 0), (11, 12), (12, 13), (13, 14), (14, 15); INSERT INTO Schueler VALUES (0, 'Sommer', 'Adrian', 'Wirtschaft', 10.5), (1, 'Dumat', 'Manfred', 'Lehramt', 8), (2, 'Warner', 'Herta', 'Informatik', 7.3), (3, 'Benke', 'Irma', 'Mathematik', 12), (4, 'Dietz', 'Waldemar', 'Wirtschaft', 6); </code> </popup> <h2>Abfragen</h2> <h3>Allgemeine Abfragen</h3> <p>Die folgenden Abfragen sind allgemein und sollen Funktionsweise und Umfang der Datenbank darstellen.</p> '''1) Welche Hochschulen stehen zur Auswahl?''' <run id="5c4a41c8048d3"> SELECT hochschul_name FROM Hochschule; </run> '''2) Welche Studiengänge bieten als Abschluss den "Bachelor of Science"?''' <run id="5c4a42f3cc98a"> SELECT * FROM Studiengang WHERE abschluss = 'Bachelor of Science'; </run> '''3) Welche Studiengänge kann man an der "HTW Dresden" studieren?''' <run id="5c4a44a2215c1"> SELECT Studiengang.studiengang_name AS Studiengang, Studiengang.abschluss AS Abschluss FROM Hochschule, Studiengang WHERE Hochschule.hochschul_name = 'HTW Dresden' AND Hochschule.hochschul_id = Studiengang.hochschul_id; </run> '''4) Welche Studiengänge haben eine bessere Bewertung als 4.0 und mehr als 8 Semester und an welchen Hochschulen werden diese Studiengänge unterrichet? <run id="5c4a45bae7ed1"> SELECT Studiengang.studiengang_name AS Studiengang, Studiengang.bewertung AS Bewertung, Studiengang.semester_zahl AS Semester, Hochschule.hochschul_name AS Hochschule FROM Studiengang, Hochschule WHERE Studiengang.bewertung > 4 AND Studiengang.semester_zahl > 8 AND Hochschule.hochschul_id = Studiengang.hochschul_id; </run> '''5) In welcher Stadt ist ein informatisches Studium von den Mietpreisen aus gesehen am günstigsten? <run id="5c4a4750b5e20"> SELECT Studiengang.studiengang_name AS Studiengang, Standort.standort_name AS Standort, Standort.mietpreis AS Mietpreis FROM Studiengang, Standort, Liegt_in, Hochschule WHERE Studiengang.studiengang_name LIKE '%informatik%' AND Liegt_in.hochschul_id = Hochschule.hochschul_id AND Liegt_in.standort_id = Standort.standort_id AND Studiengang.hochschul_id = Hochschule.hochschul_id ORDER BY Standort.mietpreis LIMIT 5; </run> <h3>Konkrete Abfragen</h3> Die folgenden Abfragen werden mithilfe der fiktiven Schüler-Tabelle verwirklicht. <run id="5c383be27b0c7"> </run> <h2>Kritische Reflexion</h2> Ich schätze meinen Datenbank-Beleg als gelungenes Beispiel für eine praxisnahe Anwendung ein. Eine Datenbank dieser Art kann bei noch größeren Datenmengen sehr hilfreich für Schüler und Studieninteressierte sein. Ich kann durch die Fülle an Informationen zu Studiengängen und Hochschulen keine repräsentative Datenbank erstellen, aber die eingeschränkte Funktionsweise meiner Datenbank zeigt das mögliche Potenzial dieser Idee. <h2>Quellen</h2> <ol> <li>[http://www.datenbanken-verstehen.de http://www.datenbanken-verstehen.de]</li> <li>[https://www.studycheck.de https://www.studycheck.de]</li> <li>[https://www.google.com/maps https://www.google.com/maps]</li> <li>[https://www.draw.io https://www.draw.io]</li> <li>[https://www.db-designer.net https://www.dbdesigner.net]</li> </ol>