PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem bei einem relationalen Datenbankmodell


PH4Real
2004-06-02, 14:00:51
Hallo,

also es steht folgendes Szenario fest:


Es gibt eine Relation vom Typ "Fachbereich". Diese hat unter anderem die Attribute "Beschreibung", "ID", etc. Des Weiteren hat gehört zu jedem Fachbereich genau ein Leiter, also ein Attribut "Leiter" vom Typ "WissentschaftlicherMitarbeiter", welches einen Fremdschlüssel zu der Relation darstellt.

Des Weiteren gibt es natürlich dann noch eine Relation "WissentschaftlicherMitarbeiter", wieder bestehend aus mehreren Attributen, wobei jeder Mitarbeiter zu genau einem "Fachbereich" zugeordnet ist. Also auch hier ein Attribut mit dem Fremdschlüssel des Fachbereiches.

Das Modell ist vorgegeben und darf nicht geändert werden.


So... mein Problem ist nun, wie ich denn nun die Einträge am Anfang anlegen soll? Wenn ich einen Fachbereich anlegen möchte, muss ich natürlich gleich einen Leiter mitangeben, den es aber noch nicht gibt... Wenn ich dann mit den Wissentschaftlichen Mitarbeitern anfange, komme ich auch nicht weiter, da der Mitarbeiter ja genau zu einem Fachbereich gehören soll.

Gibt es irgendwie so eine Möglichkeit in SQL quasi "Paare" gleichzeitig anzulegen, die auf sich gegenseitig verweisen?

Ich könnte natürlich auch erst die Fachbereichs Tabelle abändern, alle Fachbereiche hinzufügen, und erst dann die Spalte Leiter erstellen und auffüllen, aber sehr konsistent kommt mir das nicht vor...

Ach ja, ich benutze PostgreSQL, aber das sollte eigentlich keine so große Rolle spielen.

Vielen Dank schonmal im Voraus.

ethrandil
2004-06-02, 14:08:15
bist du sicher, dass dieses Modell genau so in der Aufgabe stand?

Das ist doch unsinnig. Wenn jeder FAchbereichsleiter nur einen Fachbereich leitet muss man das nur einmal angeben, ansonsten sind die Daten redundant.

- Eth

PH4Real
2004-06-02, 14:13:30
Hm... vielleicht habe ich mich umständlich ausgedrückt, dass ist schon so richtig...

Also jeder Fachbereich hat genau einen Leiter, darum steht er auch in der Relation Fachbereich. Zusätzlich sind aber wissentschaftliche Mitarbeiter (davon sind natürlich nicht alle Leiter von Fachbereichen) allgemein einem Fachbereich zugeordnet. Deswegen wird der Fremdschlüssel des Fachbereiches beim Mitarbeiter hinzugefügt...

Per IB wird dann geprüft, dass der Leiter eines Fachbereiches natürlich genau dem Fachbereich angehört, welcher er leitet...

EDIT: Also sind die Daten nicht redundant, da ja der Leiter nur einmal beim entsprechendem Fachbereich vermerkt wird.

Gast
2004-06-02, 14:44:12
Also so, wie du das Modell beschreiben hast, ist es fehlerhaft.

Ein wissenschaftlicher Mitarbeiter muss einem Fachbereich angehören.

Ein Fachbereich muss aber nicht notwendigerweise wissenschaftliche Mitarbeiter (auch Leiter) haben. Es könnte z.B. die Stelle des Leiters ja vakant sein.

Ist es möglich, dass du die Begriffe Tabelle und Relation ducheinander gebracht hast? Mir ist keine attributbehaftete Relation bekannt.

PH4Real
2004-06-02, 15:08:06
Original geschrieben von Gast
Also so, wie du das Modell beschreiben hast, ist es fehlerhaft.

Ein wissenschaftlicher Mitarbeiter muss einem Fachbereich angehören.


Korrekt.


Ein Fachbereich muss aber nicht notwendigerweise wissenschaftliche Mitarbeiter (auch Leiter) haben. Es könnte z.B. die Stelle des Leiters ja vakant sein.


Nee... das habe ich nicht gesagt... ich habe gesagt, dass "zu jedem Fachbereich genau ein Leiter" gehört. Dieser ist dann nicht optional (tut mir leid, wenn das falsch rüberkam).


Ist es möglich, dass du die Begriffe Tabelle und Relation ducheinander gebracht hast? Mir ist keine attributbehaftete Relation bekannt.

Huh?... Also wenn ich das richtig in Erinnerung habe gilt:
Relationschema = R(A1 : D1,...,AN : DN)
mit R = Relationenname
Ai : Di = Attribute für i
Di = Datentyp
das ganze entspricht: Objektsorte R mit Attributen Ai(R) : Di

Aber darum geht es hier ja nicht ;)...


Ich habe jetzt einfach mal die Grafik des Relationschematas angehängt. Dabei ist zwar hier das ganze noch in Institut und dann erst Fachbereich unterteilt, aber das Problem ist das gleiche:

http://www-public.tu-bs.de:8080/~y0018468/temp/Relationenschemata.jpg

Hier sieht man jetzt schön die rekursive Beziehung zwischen Institut und wissMitarbeiter...

Vielleicht kann mir ja jetzt jemand helfen (oder das Ganze in den Boden stampfen ;) )...

Gast
2004-06-02, 15:27:36
Wie schon gesagt, imo ist das Modell fehlerhaft.

Muss denn nicht nach der dritten Normalform der Leiter des Fachbereichs (hier fehlerhaft Institut.Leiter) in die Tabelle Fachbereich (Fachbereich.Leiter)?

ethrandil
2004-06-02, 15:49:39
Nunja, wenn du das Modell so haben willst (wenngleich ich es auch für nicht optimal halte), dann gibt es die Möglichkeit von Transaktionen.

Ich weiß nicht genau wie sehr PostgreSQL das unterstützt, allerdings kann man so eine Folge von SQL-Befehlen ausführen, zwischen denen ncihts anderes geschieht.

Das würde in deinem Fall Integrität erzwingen.

starte Transaktion
erstelle Fachbereich
erstelle wissMitarbeiter ohne Institut
erstelle Insitut mit richtigem FAchbereich & mitarbeiter
setze das Institut des mitarbeiters
beende Transaktion

- Eth

PH4Real
2004-06-02, 15:56:39
Hmm... Danke schonmal. Ich werde es mal so versuchen.

Leider kann ich das Modell nicht abändern, da es vorgegeben ist.

Mich würde aber rein interessehalber mal wissen, wie man das Modell abändern könnte, so dass immer noch jedes Institut genau einen Leiter hat, jeder Mitarbeiter genau einem Institut zugeordnet ist etc., bei welchem diese Problematik nicht auftaucht (wenn es nicht zuviel Umstände macht).

Gast
2004-06-02, 16:06:15
Da haben wir schon das erste Problem bei der Datenmodellierung.

Original geschrieben von PH4Real
Des Weiteren hat gehört zu jedem Fachbereich genau ein Leiter, ......, so dass immer noch jedes Institut genau einen Leiter hat,...

Soll jetzt jeder Fachbereich oder jedes Institut einen Leiter haben, oder gar beides?

PH4Real
2004-06-02, 16:10:38
Also ich habe ganz oben wie schon erwähnt in der Beschreibung Fachbereich mit Institut verwechselt (es machte aber auch kein Unterschied für das Problem)...

EDIT: Natürlich macht es einen Unterschied bei der Modellierung, aber nicht bei meinem Problem mit der Rekursiven Abhängigkeit ;)

Es soll das der Grafik gelten, also ein Institut gehört genau zu einem Fachbereich und zu einem Institut gehört genau ein Leiter.

D-Swat
2004-06-02, 19:24:05
Du könntest natürlich auch den schlechten Weg gehen. :)
1. constraints für beide Tabellen deaktivieren
2. Tabellen updaten
3. constraints wieder einschalten

Ist aber nich die feine englische art.

PH4Real
2004-06-03, 20:15:29
Dank an ethrandil und D-Swat.

Eure Vorschläge haben geklappt und so habe ich es auch jetzt gemacht, geschachtelt in einer BEGIN;... COMMIT; Anweisung, welche PostgreSQL auch unterstützt. Da ich das ja nur für den allerersten Eintrag brauche hält sich der Verstoß gegen die feine englische Art wohl noch in Grenzen ;).