Transfumed DB

Chrissy_Love

Mitglied
Hallo zusammen, ich habe eine Frage zur Transfumed DB.

Wenn ich eine liste aller Patienten, die auf Station 26 behandelt
wurden mit den Angaben Name, Vorname erstellen möchte.

Ist das dann so richtig?

Wenn ich mache.
Selcet *From org_einheit o;
Select*From d_org_typ d;

Meine Lösung:

Select org_name, Name, Vorname from Person Natural Join Behandlungsfall Natrual Join org_einheit Where org_name = 'station 26';

Meine zweite Frage wäre:

Wenn ich alle Personen, die eine Transfusion mit einem Blutprodukt aus der
Chargennummer 2000 erhalten haben und bei denen eine Transfusionsreaktion aufgetreten
ist ermitteln möchte. Aufgelisten durch PIZ, Name und Datum der Transfusion.

Meine Lösung :

Select PIZ, Name, Datum from Person Natural Join Transfusion Where 'TRANSREAKT = true' AND Natural Join Blutprodukt WHERE 'CHARGE_NR = 2000';


Und etwas was ich überhaupt nicht hinbekomme ist einen Trigger zu entwickeln, der die Datenintegrität beim Auftreten von
Transfusionsreaktionen gewährleistet.


Ich hoffe ihr könnt mir weiter helfen.

Vielen Dank schon mal.

Liebe Grüße Chrissy
 

Anhänge

  • Ubersicht Transfusionsdatenbank.pdf
    23,2 KB · Aufrufe: 39
Zuletzt bearbeitet:
Leider wird dir hier niemand eine Antwort auf deine Frage geben können, weil wir die Tabellen-Architektur nicht kennen ;) und die Aufgabenstellung zu ungenau ist.
Aber deine Abfragen könnten durchaus "richtig" sein. Wobei es SELECT heißt und die Abfragen (von Tabellennamen und Spaltennamen mal abgesehen) normalerweise groß geschrieben werden. Auch wenn das keine Auswirkung auf die Abfrage an sich hat ;) Außerdem musst du auf deine Leerzeichen besser achten.
Ein NATURAL JOIN würde übrigens nur funktionieren, wenn eine Tabelle über einen Primärschlüssel verfügt und die andere über einen importierten Fremdschlüssel. Hierbei darf nur max eine Spalte vorhanden sein, da du sonst zwei unterschiedlich große Mengen hättest. Also kurz gesagt: In beiden Tabellen muss eine Spalte mit dem selben Namen vorhanden sein und es darf immer nur ein Wert aus einer Spalte einem anderen zugeordnet sein. (zumindest bei deinen Abfragen)

EDIT: So sehen deine Abfragen besser aus ;)

SELECT * FROM org_einheit; #(Was ist "o"?)
SELECT * FROM d_org_typ; #(Was ist "d"?)
SELECT org_name, Name, Vorname FROM Person NATURAL JOIN Behandlungsfall NATURAL JOIN org_einheit WHERE org_name = 'station 26'; #(Warum werden plötzlich Spaltennamen groß geschrieben? Das ist bestimmt ein Fehler, da Spalt normalerweise klein geschrieben sind.)
SELECT PlZ, Name, Datum FROM Person NATURAL JOIN Transfusion NATURAL JOIN Blutprodukt WHERE TRANSREAKT = true WHERE CHARGE_NR = 2000; # (auch hier ist die Groß- und Kleinschreibung der Spalten-Namen sicherlich falsch ;) )

Ich muss mich berichtigen...da ist garantiert jede Menge falsch, sry :( z.B. kann man kein NATURAL JOIN in eine WHERE-Bedingung packen :p das würde auch überhaupt keinen Sinn ergeben
 
Zuletzt bearbeitet:
Danke schon mal für deine schnelle Antwort. Genau das ist mein Problem ich habe das Thema zwei mal erstellt ich habe die Transfumed DB als Pdf angehängt. Das thema heist
Transfumed DB 2010.
 
Ach du meine Güte Wer hat denn dieses schaurige Gebilde erstellt! Das ist ja unglaublich unübersichtlich. Für mich ist soetwas zwar nichts Neues... (habe DBMS mit der vollen Punktzahl in der Uni bestanden), aber soetwas chaotisches ist mir noch nicht unter gekommen...
Mal eine ganz andere Frage am Rande... nach welchem Standard müsst ihr das überhaupt machen und was für eine Datenbank verwendet ihr MySQL, PostgreSqlL, Oracle...?
Mir scheint es so, dass dort nicht wirklich ein Standard eingehalten wird... normalerweise würde man Fremdschlüssel z.B. noch gestrichelt unterstreichen etc.
Auch die Normalisierung ist zum Teil absoluter Mist, unübersichtlich und es können jede Menge Redundanzen entstehen...

Zu deinen Lösungen: Ich könnte sie dir eben aufschreiben, doch das würde dir nicht helfen. Du musst unbedingt auf die richtigen Schreibweisen achten!

EDIT: Ich könnte sie dir nicht sicher aufschreiben, da ich mit vielen Spaltennamen nichts anfangen kann und keine Testeinträge vor mir sehe. z.B. habe ich keine Ahnung ob die Spalte ORG_NAME Namen von Stationen sind... das hast du so fest gelegt, aber richtig muss das nicht sein. Die Aufgaben sind nur zu 100% richtig lösbar, mit mehr Informationen oder Hintergrundwissen ;) sorry
Wofür brauchst du das denn?
 
Zuletzt bearbeitet:
Die DB die verwendet wird ist MySql.
Das sind Übungsaufgaben. Also mehr als die unübersichtliche Transfumed DB habe ich auch nicht. Leider :(
 
Dann schau mal hier ;) http://edb.gm.fh-koeln.de/
Die Seite hat uns damals unser Prof. empfohlen, wenn wir ein wenig SQL üben wollten. Man bekommt dort recht gute Übungsaufgaben gestellt und kann seine Lösungen testen ;) Wir hatten damals noch einen Server in der Uni, wo wir 100 Aufgaben in einer bestimmten Zeit richtig lösen mussten, um zur Klausur zugelassen zu werden ^^ der Server hat aber nicht so gut funktioniert, da er immer nur 1 oder 2 Lösungen akzeptiert hat. Da war es am Ende mehr ein Raten nach dem richtigen Lösungsweg als alles andere ;) der Server dieser Seite soll aber ausgereifter sein, wenn auch nicht perfekt.
Viel Erfolg ;)
(Unterlagen, wo die Grundlagen erklärt werden, solltest du ja sicher haben. Die solltest du dir übrigens noch einmal anschauen ;) )
 
Hi ich habe nur die Lösungen hin bekommen so wie ich sie da auch noch stehen habe. Ich weiß aber nicht ob die genau so richtig sind abgesehen von der groß und klein schreibung.

Liebe Grüße

Chrissy
 
Hallo,

ein inner join würde dir bei den ersten beiden Aufgaben helfen. Hast du denn eigentlich eine DB auf der du testen kannst?

1. Aufgabe

SQL:
SELECT ...
FROM ORG_EINHEIT oe,
	 BEHANDLUNGSFALL bf,
	 PERSON p
WHERE oe.spalte = bf.spalte
AND   bf.spalte = p.spalte
AND   oe.org_name = 'station 26';

such dir den Weg im Diagramm und es ist alles irgenwie klar denk ich. Musst nur "spalte" ersetzen, gegen die richtigen Spaltennamen und dann sollte das laufen.
Bei der 2. Aufgabe ist es wieder genau das Gleiche:

SQL:
SELECT ...
FROM BLUTPRODUKT bp,
	 TRANSFUSION tf,
	 PERSON p
WHERE bp. = tf.
AND   tf. = p.
AND  tf.TRANSREAKT = TRUE
AND  bp.Blutprodukt = 'CHARGE_NR = 2000';

Ansatz ist ja ok, aber du musst dich mit joins beschäftigen. Im Titel deines Threads steht keine DB daher ist das mit dem Trigger nicht so leicht und dazu kommt, dass ich von Triggern keine Ahnung habe. Ich habe mal einen geschrieben, dass ist aber lange her.

Grüße
 
Zuletzt bearbeitet von einem Moderator:

Neue Beiträge

Zurück