PMG2426 4/DB Beleg/Sophia
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>SQL</language>
=='''Datenbankprojekt: Datenbank einer Arztpraxis'''==
==Ziel der Datenbank==
Die Datenbank dient dazu, Informationen über Arztpraxen, Ärzte, Patienten und deren Diagnosen strukturiert zu verwalten. So können z.B. mehrere Ärzte und deren Patienten sowie die gestellten Diagnosen erfasst und verwaltet werden.
==Modellierung in einem ERM-Modell==
[[Bild:SoPau_ERM_Modell_2.0..jpg]]
==Transformation in das Relationenmodell==
==Erstellen der DB==
<code id="52dcdf16795a2">
CREATE TABLE Arztpraxis (
Arztpraxis_ID INT PRIMARY KEY,
Telefonnummer VARCHAR(15),
Anschrift VARCHAR(255),
Postleitzahl VARCHAR(10),
Spezialisierung VARCHAR(50)
);
CREATE TABLE Arzt (
Arzt_ID INT PRIMARY KEY,
Vorname VARCHAR(50),
Nachname VARCHAR(50),
Geburtsjahr INT,
Arztpraxis_ID INT,
FOREIGN KEY (Arztpraxis_ID) REFERENCES Arztpraxis(Arztpraxis_ID)
);
CREATE TABLE Patient (
Patient_ID INT PRIMARY KEY,
Vorname VARCHAR(50),
Nachname VARCHAR(50),
Geburtsjahr INT,
Wohnort VARCHAR(50),
Krankenkasse VARCHAR(50)
);
CREATE TABLE Diagnose (
Diagnose_ID INT PRIMARY KEY,
Informationen TEXT,
Patient_ID INT,
FOREIGN KEY (Patient_ID) REFERENCES Patient(Patient_ID)
);
CREATE TABLE ArztBehandeltPatient (
Arzt_ID INT,
Patient_ID INT,
PRIMARY KEY (Arzt_ID, Patient_ID),
FOREIGN KEY (Arzt_ID) REFERENCES Arzt(Arzt_ID),
FOREIGN KEY (Patient_ID) REFERENCES Patient(Patient_ID)
);
INSERT INTO Arztpraxis VALUES (1, '030-1234567', 'Musterstraße 1, Berlin', '10115', 'Allgemeinmedizin');
INSERT INTO Arztpraxis VALUES (2, '040-2345678', 'Lindenweg 5, Hamburg', '20095', 'Dermatologie');
INSERT INTO Arztpraxis VALUES (3, '089-3456789', 'Kirchplatz 3, München', '80331', 'Pädiatrie');
INSERT INTO Arztpraxis VALUES (4, '069-4567890', 'Wiesenweg 10, Frankfurt', '60311', 'Orthopädie');
INSERT INTO Arztpraxis VALUES (5, '0221-5678901', 'Bahnhofstraße 8, Köln', '50667', 'Neurologie');
INSERT INTO Arzt VALUES (1, 'Hans', 'Müller', 1978, 1);
INSERT INTO Arzt VALUES (2, 'Maria', 'Schmidt', 1973, 2);
INSERT INTO Arzt VALUES (3, 'Thomas', 'Meier', 1988, 3);
INSERT INTO Arzt VALUES (4, 'Sabine', 'Schneider', 1983, 4);
INSERT INTO Arzt VALUES (5, 'Michael', 'Weber', 1968, 5);
INSERT INTO Patient VALUES (1, 'Peter', 'Becker', 1993, 'Berlin', 'AOK');
INSERT INTO Patient VALUES (2, 'Anna', 'Schulz', 1998, 'Hamburg', 'TK');
INSERT INTO Patient VALUES (3, 'Julia', 'Fischer', 1983, 'München', 'Barmer');
INSERT INTO Patient VALUES (4, 'Markus','Weiß', 1968, 'Frankfurt', 'DAK');
INSERT INTO Patient VALUES (5, 'Laura', 'Wagner', 1963, 'Köln', 'Barmer');
INSERT INTO Diagnose VALUES (1, 'Grippe', 1);
INSERT INTO Diagnose VALUES (2, 'Erkältung', 1);
INSERT INTO Diagnose VALUES (3, 'Allergie', 2);
INSERT INTO Diagnose VALUES (4, 'Diabetes Typ 2', 3);
INSERT INTO Diagnose VALUES (5, 'Bluthochdruck', 4);
INSERT INTO ArztBehandeltPatient VALUES (1, 1);
INSERT INTO ArztBehandeltPatient VALUES (1, 2);
INSERT INTO ArztBehandeltPatient VALUES (2, 3);
INSERT INTO ArztBehandeltPatient VALUES (3, 4);
INSERT INTO ArztBehandeltPatient VALUES (4, 5);
</code>
----
==Erstellen von verschiedenen Abfragen==
Abfrage aller Arztpraxen mit Spezialisierung "Pädiatrie"
<run id="52f89f4ff1818">
SELECT * FROM Arztpraxis
WHERE Spezialisierung = 'Pädiatrie';
</run>
Abfrage aller Patienten, die in Berlin leben
<run id="92f89f4ff1818">
SELECT Vorname, Nachname
FROM Patient
WHERE Wohnort = 'Berlin';
</run>
Abfrage von Patienten und ihren behandelnden Ärzten
<run id="52f89f4ff1811">
SELECT P.Vorname AS PatientVorname, P.Nachname AS PatientNachname,
A.Vorname AS ArztVorname, A.Nachname AS ArztNachname
FROM Patient P
JOIN ArztBehandeltPatient ABP ON P.Patient_ID = ABP.Patient_ID
JOIN Arzt A ON ABP.Arzt_ID = A.Arzt_ID;
</run>
Abfrage der Diagnose von Peter Becker
<run id="52f89f4fg1818">
SELECT D.Informationen
FROM Diagnose D
JOIN Patient P ON D.Patient_ID = P.Patient_ID
WHERE P.Vorname = 'Peter' AND P.Nachname = 'Becker';
</run>
Abfrage der Diagnosen pro Patient
<run id="52f89f4fg1813">
SELECT p.Patient_ID, p.Vorname, p.Nachname, COUNT(d.Diagnose_ID) AS AnzahlDiagnosen
FROM Patient p
LEFT JOIN Diagnose d ON p.Patient_ID = d.Patient_ID
GROUP BY p.Patient_ID, p.Vorname, p.Nachname;
</run>
==Kritische Reflexion zu Modellierung und Umsetzung==
Die Datenbank hat eine klare Tabellenstruktur, in der jede Entität eigenständig modelliert ist. Dies entspricht der Normalisierung, z.B. gibt es eine Patiententabelle und keine mehrfach gespeicherten Patientendaten. Die Trennung in Tabellen für Ärzte, Patienten, Praxen und Diagnosen verhindert Redundanzen.
Verbesserungen: Es könnten zusätzliche Attribute ergänzt werden (z.B. Kontaktdaten für Ärzte oder Patienten). Auch die Speicherung von Terminen oder Medikamenten wäre sinnvoll. Es ist wichtig, dass keine Daten mehrfach gespeichert werden, um Inkonsistenzen zu vermeiden genau dies erreicht die Normalisierung. Ist irgendwo Redundanz vorhanden (z.B. gleiche Diagnosebezeichnung in mehreren Zeilen), ließen sich die Tabellen weiter normalisieren. Zudem sollte geprüft werden, ob alle Relationen mindestens in der dritten Normalform sind, um Datenaktualisierung zu vereinfachen und Anomalien zu vermeiden
==Verwendete Quellen, Tools, etc.==
* ERDplus