Datenbank für Patientenbesuche

DJ3MG

Benutzer
Beiträge
5
Hallo Zusammen und ein frohes neues Jahr,
ich arbeite in der ambulanten Pflege und gehe zu pflegebedürftigen Menschen, um Beratungsbesuche nach §37.3 SGB XI durchzuführen.
Diese finden je nach Pflegegrad in einem anderen Rythmus statt.
Weil wir aktuell die vergangenen Besuchsdaten nicht erfassen, möchte ich gerne eine Datenbank erstellen, in der die Besuchstermine der Vergangenheit berücksichtigt werden.
Leider bin ich relativ neu im Datenbankumfeld, weshalb ich mich an dieses Forum wende.
Folgende Daten werden erfasst:
Tabelle Patienten:
- PatientenID (AUTOINCREMENT)
- Nachname
- Vorname
- Geburtsdatum

Tabelle Besuche:
- BesuchsdatumID (AUTOINCREMENT)
- Besuchsdatum

Nun ist meine Frage:
Handelt es sich hier um eine m:n-Beziehung? Schließlich werden bei jedem Patienten mehrere Besuche absolviert aber an einem Tag finden auch mehrere Besuche bei verschiedenen Patienten statt.
Wie würde ich die Tabellen strukturieren und wie sähe eine entsprechende SQL-Abfrage aus (sowohl Datenerfassung, als auch Datenausgabe)?
Ich habe schon mehrere Tabellen mit JOINs verknüpft um andere Beziehungen abzufragen (z.B. Patient <-> Hausarzt), dies sind aber immer 1:n Beziehungen.
Aus den Hilfen im Internet mit "Zwischentabellen" werde ich leider nicht schlau. Beispiele mit Bestellungen verschiedener Schopsysteme haben mich leider nicht weitergebracht (ich bekomme es nicht in mein "Problem" übersetzt).

Ich freue mich sehr über Hilfe, eine Idee für das Setzen der Primär- und Fremdschlüssel, einen Vorschlag für die "Zwischentabelle" und ehrlich gesagt auch Codeschnipsel, damit ich die Verknüpfung besser nachvollziehen kann.

Vielen Dank für Eure Unterstützung
 
Werbung:
Mh, reicht Dir als erstes dies:

Code:
edb=# create table patienten(id int generated always as identity primary key, name text);
CREATE TABLE
edb=*# create table besuche (id int generated always as identity primary key, patient int references patienten, datum date);
CREATE TABLE
edb=*# insert into patienten (name) values ('meier');
INSERT 0 1
edb=*# insert into patienten (name) values ('schulze');
INSERT 0 1
edb=*# insert into besuche (patient, datum) values (1, '2022-01-01');
INSERT 0 1
edb=*# insert into besuche (patient, datum) values (1, '2022-01-02');
INSERT 0 1
edb=*# insert into besuche (patient, datum) values (2, '2022-01-01');
INSERT 0 1
edb=*# select * from patienten;
 id |  name   
----+---------
  1 | meier
  2 | schulze
(2 rows)

edb=*# select * from besuche;
 id | patient |       datum        
----+---------+--------------------
  1 |       1 | 01-JAN-22 00:00:00
  2 |       1 | 02-JAN-22 00:00:00
  3 |       2 | 01-JAN-22 00:00:00
(3 rows)

edb=*# select * from besuche b left join patienten p on p.id=b.patient;
 id | patient |       datum        | id |  name   
----+---------+--------------------+----+---------
  1 |       1 | 01-JAN-22 00:00:00 |  1 | meier
  2 |       1 | 02-JAN-22 00:00:00 |  1 | meier
  3 |       2 | 01-JAN-22 00:00:00 |  2 | schulze
(3 rows)

edb=*#
 
ach so, und für das Einfügen, hier hast Du ja erst mal nur den Namen, brauchst aber die ID als FK. Das geht einfach so:

Code:
edb=# with id as (select id from patienten where name = 'schulze') insert into besuche (patient, datum) select id, '2022-01-03' from id;
INSERT 0 1
edb=*# select * from besuche;
 id | patient |       datum        
----+---------+--------------------
  1 |       1 | 01-JAN-22 00:00:00
  2 |       1 | 02-JAN-22 00:00:00
  3 |       2 | 01-JAN-22 00:00:00
  4 |       2 | 03-JAN-22 00:00:00
(4 rows)

edb=*#

Du siehst, das ist 1 SQL, welches gleichzeitig zu einem bekannten Namen (schulze) die ID aus Patienten ermittelt und diese ID und das Datum in Besuche einträgt.
In einer GUI kann man natürlich auch die Patienten auflisten, dann klickt man einen an, und speichert den Besuch. Da sollte ja die ID auch so bekannt sein.
 
Code:
with id as (select id from patienten where name = 'schulze') insert into besuche..
Sicherheitshalber der Hinweis, dass ein solches Statement in Echt natürlich für Eindeutigkeit sorgen muss!
Konkret sollte es also mehr natürliche Eindeutigkeitskriterien verwenden und für den Fall des Falles in irgendeiner Form ein Fehler provozieren sollte.
 
Hallo Zusammen, vielen Dank für Eure Unterstützung.
Ich antworte leider erst jetzt, weil ich den ganzen Tag unterwegs war.
Ich werde die Vorschläge testen und Euch Bescheid geben (aber vsl. erst morgen).
Vielen Dank und viele Grüße
 
Guten Morgen zusammen,
ich habe jetzt versucht die Code-Zeilen in meine (Test-)Datenbank einzufügen. Leider bekomme ich folgende Ausgabe:

SQL:
create table patienten(id int generated always as identity primary key, name text);
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'identity primary key, name text)' at line 1
Bei der Eingabe der nächsten Codezeile erhalte ich ein ähnliches Ergebnis, das auf den selben Fehler hinweist.

Folgende Ausgabe über den Server erhalte ich bei der STATUS Abfrage:
--------------
mysql Ver 15.1 Distrib 10.3.32-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2

Connection id: 85
Current database: edb
Current user:
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server: MySQL
Server version: 8.0.27-0ubuntu0.20.04.1 (Ubuntu)
Protocol version: 10
Connection:
Server characterset: utf8mb4
Db characterset: utf8mb4
Client characterset: utf8mb3
Conn. characterset: utf8mb3
TCP port: 3306
Uptime: 23 min 1 sec

Threads: 2 Questions: 658 Slow queries: 0 Opens: 373 Flush tables: 3 Open tables: 292 Queries per second avg: 0.476
--------------
 
ja, ich verwende PostgreSQL. Viele coole Dinge gehen halt nicht mit MySQL, das wirst Du noch oft merken. Die CREATE-Statements kannst Du aber anpassen, auf Auto-Increment. Syntax findest Du im MySQL-Handbuch.
 
ja, ich verwende PostgreSQL. Viele coole Dinge gehen halt nicht mit MySQL, das wirst Du noch oft merken. Die CREATE-Statements kannst Du aber anpassen, auf Auto-Increment. Syntax findest Du im MySQL-Handbuch.
Danke für die Information.
Jetzt habe ich mir in der Vergangenheit viele Bücher über MySQL und PHP gekauft und auch schon die ein oder andere einfache Datenbank unter MySQL geschaffen. Kann ich diese denn nach PostgreeSQL portieren oder gibt es dort Probleme? Funktioniert phpmyadmin ebenfalls unter PostgreeSQL?
 
Werbung:
Zurück
Oben