title image


Smiley Re: grundsätzliches Verständnisproblem bei Relationen
Hallo,

die Relationen in deinem Bildchen habe ich nicht genau verstanden, Ich deute sie datenbanktechnisch mal so:



Tabelle a hat die Felder (a1[PK], a2, a3)

Tabelle b hat die Felder (b1[PK], b2, b3)

Tabelle c hat die Felder (c1[PK], c2, c3)



Es bestehen folgende Beziehungen:

Feld a2 ist ein FOREIGN KEY mit der Aufgabe, Tabelle b zu verbinden.

Feld b3 ist ein FOREIGN KEY mit der Aufgabe, Tabelle c zu verbinden.



Solche FOREIGN KEY Felder dürfen nur Werte annehmen, die dem PRIMARY KEY der verbundenen Tabelle entsprechen, oder NULL sind.



Du könntest also, wenn alle FOREIGN KEY Felder in deinen Tabellen in allen Datensätzen nicht NULL sind (also a2 und b3 nirgends NULL), eine vollständige Übersicht von a erzeugen, indem du folgendes Statement absetzt:



SELECT a1, a2, a3, b1, b2, b3, c1, c2, c3

FROM a,b,c

WHERE a2=b1 AND b3=c1



Dabei würden alle Datensätze von a nur einmal auftreten, die Sätze von b und c aber entsprechend ihren Verbindungen viel häufiger.



Beispiel:

Tabelle a wäre eine Angestelltentabelle ANGESTELLTE mit den Feldern (name, abteilung, gehalt)

Tabelle b wäre ABTEILUNGEN mit den Feldern (abteilung, abteilungsleiter, gebaeude)

Tabelle c wäre GEBAEUDE mit den Feldern (gebaeude, anschrift, hausverwaltung)



Tabelle GEBAEUDE:

"Haupthaus", "Schlossallee 1", "oriberu"

"Nebenbau", "Badstrasse 5 1/16 - Untergeschoss", "andi77"



Tabelle ABTEILUNGEN:

"Einkauf", "Clever", "Haupthaus"

"Verkauf", "Smart", "Haupthaus"

"Lager", "Schlepper", "Nebenbau"

"Helpdesk", "P. Herzog", "Nebenbau"

"Schulung", "P. Herzog", "Nebenbau"



Tabelle ANGESTELLTE:

"Saluk", "Helpdesk", "0"

"bitstream", "Helpdesk", "0"

"SQL-Informix", "Helpdesk", "0"

"FenchelT", "Helpdesk", "0"

"oriberu", "Schulung", "0"



Aus diesem Beispiel kannst du sehen, dass in den FOREIGN KEYS immer Zeiger auf die zugehörige Tabelle abgelegt sind. Wird nun ein neuer Angestellter erfasst, der noch keiner Abteilung zugewiesen ist, dann kann er nur mit NULL erfasst werden. Sobald er einer Abteilung, z.B. Einkauf, zugewiesen wird, wird das Feld upgedatet und automatisch wird dann klar, dass der neue Angestellte dann auch in der Schlossallee 1 untergebracht wird und oriberu unterstellt ist.



Zu deinen Fragen:

Du kannst also in a (ANGESTELLTE) keine Datensätze erfassen, bei denen das Feld "Abteilung" einen nicht in ABTEILUNGEN enthaltenen Wert enthält, sonst zeigst du ja "ins Leere". Das Feld "Abteilung" darf deshalb nur Werte enthalten, die einem existierenden PRIMARY KEY in ABTEILUNGEN entsprechen, oder NULL (wie in dem Beispiel mit dem neuen Mitarbeiter).

Deine 3. Frage mit der Änderung in C3 bezieht sich auf die irrige Annahme, dass die Verbindung zu B über b3=c3 abläuft, dem ist natürlich nicht so, die Verbindung (Relation) geht nur über den Hauptschlüssel (PRIMARY KEY) von C, also b3=c1. Wenn du c1 ändern würdest, also aus "Nebenbau" z.B. "Aussenstelle" machen wolltest, dann würde dir dies entweder verboten, oder aber alle FOREIGN KEYs würden mitgeändert. Das kommt auf die Implementierung der Datenbank an.

diu vive floreque.
Spockus

erreicht am 04.03.2008 09:47:23

geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: