Update: Datenbankentwurf \ Autowertmanipulation

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
FitzeFatze
Beiträge: 834
Registriert: 06.07.2004 10:08:21

Update: Datenbankentwurf \ Autowertmanipulation

Beitrag von FitzeFatze » 30.01.2008 14:56:36

Hallo,
im entfernten Sinne ja auch ne Softwareentwicklung ;)

Ich hab hier grade nen Projekt am Wickel, welches Patientendaten und Befragungen speichert.
Meine Planung sah eigentlich ganz schlüssig aus, aber irgendwie habe ich evtl schon zu lang gearbeitet, oder da ist einfach der Wurm drin.

Ich bin grade dabei den ersten Fragebogen zu entwerfen. Das einfachste erschien mir auch bei der Planung am logischten, aber irgendwie weiß ich grade nicht so richtig, wie ich den Spaß umsetzten soll:

fragebogen1(fr_id,frage)
antworten1(a_id,antworten)

Fakt ist für diesen Fragebogen, dass ein Schmerz bei versch. Handlungen festgehalten werden soll, also zB:
"Hüftschmerzen beim Sitzen" -> mögl. Antworten : 1 bis 10.

Davon habe ich 30 Fragen, später variieren die Antworten, da müsst' ich dann weiter sehen ..

Das Ganze soll zwar mit Access (jaaa...) umgesetzt werden, aber man muss ja nicht ins Access-technische Detail gehen, sondern kann alles ganz lescher beschreiben.

Mein Problem ist zwar etwas schwer zu beschreiben, aber irgendwie blick ich grade einfach nicht durch, wie ich die Abfrage gestallte, das alle 30 Fragen fein säuberlich untereinander aufgelistet werden.
ich habe zwar grade alle Fragen in der DB, sprich :

Code: Alles auswählen

-----------
id | frage
1 | fr1
2 | fr2
3 |fr3
usw
-----------
aber das sind ja nur die eingetragenen Werte. sollte ich meine Tabelle etwa so aufbauen?:
fragen(fr_id,frage1,frage2,frage3,frage4....) ? ist doch auch nicht ganz knusper, oder...
weil praktisch im Endeffekt der Datensatz so aussehen sollte:

Code: Alles auswählen

PatientID, Name bla... Frage1, Frage2, Frage3...
-----------------------------------------------------
1, Peter .. , 5, 4, 6. .. 
Kann mir da vllt jmd helfen?

ciao
Zuletzt geändert von FitzeFatze am 06.03.2008 11:13:58, insgesamt 1-mal geändert.

cgarling
Beiträge: 151
Registriert: 11.04.2007 14:29:51

Beitrag von cgarling » 30.01.2008 15:38:31

Mal so als Idee, bitte nicht drauf festnageln:

1 Tabelle mit Fragen (id, frage)
1 Tabelle mit mögl. Antworten (id, antwort)
1 Tabelle mit Patientendaten (id, vorname, nachname ...)
1 Tabelle wo ein Fragebogen zusammengefasst wird:

id, vorgangsnr (diese nummer hat pro fragebogen den selben wert), patientenid, frageid, antwortid

so hast du zwar pro fragebogen soviel einträge wie es fragen in dieser tabelle gibt, aber kannst das ordentlich abfragen wie ich finde. wenn du einen fragebogen wissen willst, machst du nen query auf die vorgangsnummer und hast deine daten.

Gruß Christian

123456
Beiträge: 6126
Registriert: 08.03.2003 14:07:24

Beitrag von 123456 » 30.01.2008 15:53:15

bei Verwirrung hilft back to the roots... ;)
http://de.wikipedia.org/wiki/Normalisierung_(Datenbank)

FitzeFatze
Beiträge: 834
Registriert: 06.07.2004 10:08:21

Beitrag von FitzeFatze » 30.01.2008 15:56:26

jap, so in etwa sah meine Planung auch aus, aber irgendwie scheiter ich schon an der Fragentabelle.

ich habe die Tabellen so aufgebaut:
fragen(fr_id,fragen)
antworten(a_id,antworten)
merge(merge_id,patientenname,fr_id,a_id)

wenn ich diesen Datensatz jetzt mit meiner Abfrage bearbeite, kann ich immer nur eine Frage + eine Antwort speichern.

->

Code: Alles auswählen

merge_id,patientenname,fr_id,a_id
1,     max mustermann, 4, 7
a) können die anderen Fragen aus der Tabelle in meiner Abfrage nicht beantwortet werden und b)köennen diese dann nicht gespeichert werden.

irgendwo hab ich nen riesen Knoten grade :)
Zuletzt geändert von FitzeFatze am 30.01.2008 15:57:27, insgesamt 1-mal geändert.

FitzeFatze
Beiträge: 834
Registriert: 06.07.2004 10:08:21

Beitrag von FitzeFatze » 30.01.2008 15:56:52

mist. doppelpost

cgarling
Beiträge: 151
Registriert: 11.04.2007 14:29:51

Beitrag von cgarling » 30.01.2008 16:08:54

Na machst du das so wie ich gesagt hab, passt es doch. Beispiel:

id vorgangsnr patientid frageid antwortid
1 12 7 1 4
2 12 7 2 9
3 12 7 3 2

usw.

Verstehst du auf was ich hinaus will? Wenn du das auswerten willst fragst du die Vorgangstabelle ab und gibts als WHERE Bedingung vorgangsnr='12' an. Du musst dann wohl die anderen Tabellen mit einem join einbeziehen.

Gruß Christian

FitzeFatze
Beiträge: 834
Registriert: 06.07.2004 10:08:21

Beitrag von FitzeFatze » 30.01.2008 16:21:42

ah, ich verstehe. danke, ich werds mal so versuchen!

ub13: im Prinzip hast du recht (und ich habe auch bei der Planung versucht, alles soweit es ging einzuhalten), aber an manchen Stellen nehme ich lieber eine "unsaubere" DB in Kauf, weil es dann bei der Umsetzung einfach weniger kompliziert erscheint (oder erschien, wie man jetzt sagen könnte :D).

Ich weiß nicht, vllt ist es auch dieses Rumgeklicke von Access und die Einarbeitung in das Programm, welches das Ganze noch mehr erschwert.



Ciao

cgarling
Beiträge: 151
Registriert: 11.04.2007 14:29:51

Beitrag von cgarling » 30.01.2008 16:32:29

Gib auf jedenfall mal Feedback!

Gruß Christian

FitzeFatze
Beiträge: 834
Registriert: 06.07.2004 10:08:21

Beitrag von FitzeFatze » 01.02.2008 10:28:37

hallo,
ich nochmal.
Sitzte leider erst jetzt an der Umsetzung, und mir tut sich die Frage auf, woher die Vorgangsnummer überhaupt stammt (bzw wie sie entsteht). Diese Nummer soll def. nicht per Hand eingegeben werden und muss ja auch irgendwie an einen Patienten gebunden sein.

Vielen Dank!

Adieu

//edit:
ich habs jetzt erstmal weggelassen. würde mich aber trotzdem freuen, wenn mir jmd die o.g Fragen beantwortet.
Zuletzt geändert von FitzeFatze am 01.02.2008 11:03:01, insgesamt 1-mal geändert.

Benutzeravatar
ffpbsd
Beiträge: 147
Registriert: 01.04.2005 15:23:10
Wohnort: Senftenberg
Kontaktdaten:

Beitrag von ffpbsd » 01.02.2008 10:57:24

Hallo,

also dein Problem besteht darin, das dein Fragebogen sozusagen eine m:n Beziehung ist, also musst du um eine saubere Datenbank zu haben die 2 Tabellen mit einer Beziehungstabelle verknüpfen.

m:n heißt mehrere Patienten können mehrere Fragen haben.
1:n heißt eine Frage kann mehrere Antworten haben.

Solltest dich um das korrekt lösen zu kennen mit dem Entity-Relationship-Modell und Normalisierung von Datenbanken beschäftigen. Um Inkonsitenzen in der Datenbank zu vermeiden.

t_patien <-1:n -> Beziehungstabelle <- n:1->t_Frage
CPU: AMD X2 3800+
RAM: 2 GB
Graka: XFX GeForce 7900GT
Sound: SB Audigy 2 ZS
Board: GA-K8NF-9-RH (nForce 4)
Monitor: Asus MW221U + BenQ FP767-12
System: Debian Lenny 2.6.22-3-amd64

FitzeFatze
Beiträge: 834
Registriert: 06.07.2004 10:08:21

Beitrag von FitzeFatze » 06.03.2008 11:13:29

Halli Hallo,
ich nochmal :)

2 Monate später, und ich bin immer noch nicht fertig :) (hab auch wenig dran gearbeitet)

Jetzt habe ich aber ein neues Problem, welches nichts (hoffe ich zumindest) mit dem Entwurf zu tun hat :
Ich habe eine Tabelle, die div. Gruppen verwaltet, diese sieht momentan so aus:
gruppe(gr_id,startdatum)

Ich würde gerne noch ein 3. Feld hinzufügen, in dem noch ein Autowert steht, welcher aber stadardmäßig auf "1" steht. Nur wenn an einem Tag zb 2 (oder mehr) Gruppen gestartet werden, soll dieser hochgezählt werden.

Kann mir jmd sagen, wie ich einen Autowert in Abhängigkeit zum Datum erstellen kann?
Bzw überhaupt einen 2. Autowert generieren lassen kann?

nur zur Übersicht:
gruppe(gr_id,startdatum,datum_nr)

Code: Alles auswählen


gr_id | startdatum | datum_nr
-----------------------------
1     | 12.02.2008 | 1
2     | 13.02.2008 | 1
3     | 13.02.2008 | 2
----------------------------

vielen Dank!

FF

Paule
Beiträge: 27
Registriert: 18.10.2005 00:24:17

Beitrag von Paule » 11.03.2008 14:45:25


Antworten