PMG2224 4/DB Beleg/Magdalena

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

<language>SQL</language>
=DBMS zur Patientenaktendigitalisierung=

==Ziel der Datenbank==

Das Ziel und die Aufgabe der Folgenden Datenbank ist es, mittels eines Datenbankmanagementsystems über die Beziehung zwischen Arzt und Patient Abfragen zu erstellen. Dabei kann bspw. ermittelt werden, welcher Patient bei welchem Arzt in Behandlung ist. Des weiteren sind Abfragen über diverse Erkrankungen und Spezialisierungen der Ärzte möglich. Ich habe mich für diese Thema u.A. aus aktuellem Anlass, der Digitalisierung von Patientenakten und Rezepten, entschieden.

==Modellierung in einem ERM==
[[Bild:Magda_Screenshot_(102).png]]

==Transformation in das Relationsmodell==
* Arzt ('''Arzt_ID''', Vorname, Name, PLZ, Wohnort, Straße, Telefon)
* Patient ('''Patient_ID''', Vorname, Name, PLZ, Wohnort, Straße, Telefon, VersicherungsNr)
* Spezialisierung ('''Spezialisierungs_ID''', Beschreibung)
* Diagnose ('''Diagnose_ID''', Detail) 
* Arzt_Patient ('''Arzt_ID''', '''Patient_ID''')

* aufgrund der "n zu m Beziehung" zwischen den Entitätstypen Arzt und Patient ist eine dritte Tabelle "Arzt_Patient" nötig
[[Bild:Magda_WhatsApp_Bild_2024-03-20_um_21.22.53_658480e7.jpg]]

==Erstellen der Datenbank==
<code id="65fb4734158ea">

CREATE TABLE Arzt (
    Arzt_ID PRIMARY KEY,
    Vorname VARCHAR(100),
    Nachname VARCHAR(100),
    PLZ VARCHAR(10),
    Wohnort VARCHAR (20),
    Straße VARCHAR (25),
    Telefon VARCHAR (20)
);

CREATE TABLE Patient (
    Patient_ID PRIMARY KEY,
    Vorname VARCHAR(100),
    Nachname VARCHAR(100),
    PLZ VARCHAR(10),
    Wohnort VARCHAR (20),
    Straße VARCHAR (25),
    Telefon VARCHAR (20),
    VersicherungsNr VARCHAR (100)
);

CREATE TABLE Spezialisierung (
    Spezialisierung_ID int (10),
    Beschreibung VARCHAR (100),
    Arzt_ID VARCHAR,
    PRIMARY KEY (Spezialisierung_ID),
    FOREIGN KEY (Arzt_ID) REFERENCES Arzt(Arzt_ID)
);

CREATE TABLE Diagnose (
    Diagnose_ID PRIMARY KEY,
    Code VARCHAR (100),
    Details VARCHAR (200),
    Patient_ID VARCHAR,
    FOREIGN KEY (Patient_ID) REFERENCES Patient(Patient_ID)
);

CREATE TABLE Arzt_Patient (
    Arzt_ID VARCHAR,
    Patient_ID VARCHAR,
    FOREIGN KEY (Arzt_ID) REFERENCES Arzt(Arzt_ID),
    FOREIGN KEY (Patient_ID) REFERENCES Patient(Patient_ID)
);

</code>

<code id="65fb7a2ca0e9b">

INSERT INTO Arzt VALUES (1, 'Anna', 'Schmidt', '12345', 'Berlin', 'Hauptstraße 1', '030-1234567');
INSERT INTO Arzt VALUES (2, 'Michael', 'Müller', '54321', 'Hamburg', 'Musterweg 2', '040-9876543');
INSERT INTO Arzt VALUES (3, 'Julia', 'Wagner', '12345', 'München', 'Am Park 3', '089-5555555');
INSERT INTO Arzt VALUES (4, 'Thomas', 'Koch', '45678', 'Köln', 'Strasse 8', '0221-2222222');
INSERT INTO Arzt VALUES (5, 'Petra', 'Bauer', '98765','Frankfurt', 'Rosenweg 5', '069-3333333');
INSERT INTO Arzt VALUES (6, 'Markus', 'Schulz', '23456','Stuttgart', 'Birkenstraße 6', '0711-4444444');
INSERT INTO Arzt VALUES (7, 'Sabine', 'Hoffmann', '76543', 'Dresden', 'Elbstraße 7', '0351-6666666');
INSERT INTO Arzt VALUES (8, 'Andreas', 'Becker', '34567', 'Leipzig', 'Goetheplatz 9', '0341-7777777');
INSERT INTO Arzt VALUES (9, 'Monika', 'Schneider', '56789', 'Hannover', 'Lindenstraße  9', '0511-8888888');
INSERT INTO Arzt VALUES (10, 'Christian', 'Kühn', '87654', 'Düsseldorf', 'Kaiserallee 10', '0211-9999999');


INSERT INTO Patient VALUES (1, 'Lutz', 'Holz', '12345', 'Berlin', 'Hauptstraße 10', '030-1899567', 'V123456');
INSERT INTO Patient VALUES (2, 'Mike', 'Rof', '54771', 'Heiden', 'Musterweg 9', '040-9006543', 'V234567'); 
INSERT INTO Patient VALUES (3, 'Tom', 'Hanke', '67890', 'München', 'Am Park 12', '089-5995555', 'V345678');
INSERT INTO Patient VALUES (4, 'Tom', 'Kohl', '45778', 'Kalen', 'Lindenstraße 4', '0221-2992222', 'V456789');
INSERT INTO Patient VALUES (5, 'Reiner', 'Bernd', '99965', 'Plauen', 'Rosenallee 5', '069-3399833', 'V567890');
INSERT INTO Patient VALUES (6, 'Mario', 'Scholz', '23439', 'Bautzen', 'Birkenweg 6', '0711-4490444', 'V678901');
INSERT INTO Patient VALUES (7, 'Sandra', 'Hiertsch', '70943', 'Pirna', 'Elbuferweg 7', '0351-6897666', 'V789012');
INSERT INTO Patient VALUES (8, 'Andre', 'Bäcker', '04567', 'Kamenz', 'Goetheweg 8', '0341-7709777', 'V890123');
INSERT INTO Patient VALUES (9, 'Moni', 'Schubert', '56989', 'Halle', 'Lindenweg 10', '0511-8883458', 'V901234');
INSERT INTO Patient VALUES (10, 'Christoph', 'Kun', '97654', 'Zieschen', 'Kaiserstraße 12', '0211-9999079', 'V012345');


INSERT INTO Spezialisierung VALUES (1, 'Allgemeinmedizin', '1');
INSERT INTO Spezialisierung VALUES (2, 'Chirurgie', '5');
INSERT INTO Spezialisierung VALUES (3, 'Innere Medizin', '9');
INSERT INTO Spezialisierung VALUES (4, 'Orthopädie', '2');
INSERT INTO Spezialisierung VALUES (5, 'Gynäkologie', '4');

INSERT INTO Diagnose VALUES (1, 'D123', 'Erkältung', '7');
INSERT INTO Diagnose VALUES (2, 'I456', 'Grippe', '3');
INSERT INTO Diagnose VALUES (3, 'A789', 'Allergie', '6');
INSERT INTO Diagnose VALUES (4, 'H234', 'Hypertonie', '1');
INSERT INTO Diagnose VALUES (5, 'C567', 'Diabetes', '4');
INSERT INTO Diagnose VALUES (6, 'D587', 'Diabetes', '7');
INSERT INTO Diagnose VALUES (7, 'C987', 'Allergie', '8');


INSERT INTO Arzt_Patient VALUES (1, 1);
INSERT INTO Arzt_Patient VALUES (4, 2);
INSERT INTO Arzt_Patient VALUES (7, 5);
INSERT INTO Arzt_Patient VALUES (9, 8);

</code>

==Beispielhafte Abfragen==

'''1) Gesamtheit der Ärzte mit Anschrift (= Arztpraxen)'''
<run id="65fb196820614"></run>

'''2) Gesamtheit der eingespeißten Patientendaten'''
<run id="65fb33aa8ca12"></run>

'''3) Welche Ärzte sind Allgemeinmediziner?'''
<run id="65fb3542bd23b"></run>

'''4) Welche Diagnosen erhielt der Patient mit der ID "7"?'''
<run id="65fb7a2ca0f02"></run>

==Kritische Reflexion zu Modellierung und Umsetzung==
===Allgemein===
Die Modellierung der Datenbank im ERM wirkt übersichtlich und strukturiert. Die einzelnen Entitätstypen sind über ihre jeweiligen, identischen Primärschlüssel eindeutig definiert und verfügen über eine edukative Menge an Attributen. Die Tatsache, dass alle Beziehungstypen mit "hat" benannt sind, kann kritisiert werden. Es kann in diesem Fall evtl. zur Verwirrung führen.
Die Übersetzung in SQL in der Datenbank bildet das ERM identisch ab. Auch die Menge an Beispieldatensätzen ist ausreichend für die exemplarische Vorführung. Die Tatsache der Endlichkeit der Datensätze sollte keinen Kritikpunkt darstellen, da eine Datenbank von stetiger Einspeisung lebt.

 
===Kardinalität===
Mit der Kardinalität wird der Beziehungsstatus zwischen zwei Entitätstypen beschrieben. Im vorliegenden ERM ist zwei Mal eine 1:n Beziehung und eine n:m Beziehung erkennbar. Diese erschließen sich wie folgt:
* Ein Arzt kann sich auf mehrere Bereiche spezialisieren./ Eine Spezialisation wird von einem Arzt ausgeführt.
* Ein Arzt hat viele Patienten./ Ein Patient hat mehrere Ärzte.
* Ein Patient hat mehrere Diagnosen./ Eine Diagnose erhält ein Patient.
Durch die "n zu m Beziehung" zwischen den Entitätstypen Arzt und Patient ergibt sich eine zusätzliche "dritte" Tabelle "Arzt_Patient".
Auch in der Umsetzung in der Datenbank, wurde die Kardinalität erfüllt, da die Primär- und Fremdschlüssel den jeweiligen Tabellen zugeordnet wurden.
Abschließen kann kritisiert werden, dass Die 1:n Beziehung zwischenArzt und Spezialisierung auch zwischen den Entitätstypen umgetausch werden könnte.

===Normalisierung===
Aufgabe der Normalisierung ist es, einen integeren Datensatz zu erzeugen und damit vor Redundanzen und Anomalien zu schützen, die möglicherweise durch das Einfügen oder Löschen von Daten entstehen können. Mit Blick auf die erstellte Datenbank wurde jede Tabelle in der Zweiten Normalform verfasst. Damit liegt automatisch die erste Normalform ebenso vor. Die einzelnen Attribute der Entitätstypen sind auch in den Tabellen in separaten "Spalten" unterteilt. 
Ein Kritikpuntk der obigen Datenbank ist das Fehlen der Dritten Normalform. Voneinander abhängige Attribute, wie PLZ und Wohnort könnten weiter in Untertabellen unterteilt werden. Dieser Schritt wurde nicht gegangen.


==Quellen==
• ERDplus