PMG2426 4/DB Beleg/Sophia

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

<language>SQL</language>

=='''Datenbankprojekt: Datenbank einer Arztpraxis'''==


==Ziel der Datenbank==
==Modellierung in einem ERM-Modell==
==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>

Patienten, die von mehreren Ärzten behandelt wurden
<run id="52f89g4fg1818">
SELECT p.Patient_ID, p.Vorname, p.Nachname, COUNT(DISTINCT ap.Arzt_ID) AS AnzahlArzte
FROM Patient p
JOIN ArztBehandeltPatient ap ON p.Patient_ID = ap.Patient_ID
GROUP BY p.Patient_ID, p.Vorname, p.Nachname
HAVING COUNT(DISTINCT ap.Arzt_ID) > 1;
</run>

==Kritische Reflexion zu Modellierung und Umsetzung==
==Verwendete Quellen, Tools, etc.==