Beziehungskiste auf selbe Tabelle

AlexD1979

Erfahrenes Mitglied
Hallo,
Ich bastel gerade an einer Datenbank, wobei ich dort im Moment nicht wirklich weiter komme.
Ich habe eine Tabelle Kunde mit Feldern Name, Vorname, ... und Flag istHauptsitz J/N
nun möchte ich zu einem Datensatz mit dem Flag istHauptsitz Niederlassungen erfassen. Ich muss dann ja dem Hauptelement mit ID xy irgendwie sagen, du hast n Niederlassungen und im Umkehrschluss muss jede Niederlassung wissen, wer ihr Hauptsitz ist. Wie löst man sowas logisch in einer Datenbank? Mit zwei Tabellen Hauptsitz und Niederlassungen oder in geht das in einer Tabelle
 
Du kannst ja eine zusätzliche Spalte hauptsitz einfügen, wo ggf. der Hauptsitz drin vorkommt (bzw. die ID desselben). Dann liest du alle Datensätze aus, deren hauptsitz die Id des Hauptsitzes hat. Der Hauptsitz selbst hat am besten 0 oder so.
 
SilentWarrior hat gesagt.:
Du kannst ja eine zusätzliche Spalte hauptsitz einfügen, wo ggf. der Hauptsitz drin vorkommt (bzw. die ID desselben). Dann liest du alle Datensätze aus, deren hauptsitz die Id des Hauptsitzes hat. Der Hauptsitz selbst hat am besten 0 oder so.

Also du meinst in Tabelle Hauptsitz alle Daten erfassen und in Tabelle Niederlassungen ein Feld Hauptsitz, in dem ich die ID des Hauptsitzes angebe?
Wie soll der Hauptsitz immer null haben, wenn ich mehrere Datensätze erfasse?

Geht das nicht irgendwie in einer Tabelle, das ich in der Tabelle alle Daten erfasse (Hauptsitze und Niederlassungen) mit einem Flag Hauptsitz J/N und dann irgendwie in dem Datensatz mit dem Hauptsitz=J ein weiteres Feld Niederlassungen habe, in denen die IDs der Niederlassungen stehen?

Bisher so (Info: das Feld main_office ist das Feld Hauptsitz J/N):
Code:
CREATE TABLE tdb_transporter (
       transporter_id       INTEGER NOT NULL,
       obj_type             INTEGER NOT NULL,
       comp_name            VARCHAR2(255) NOT NULL,
       street               VARCHAR2(255) NULL,
       postoffice           VARCHAR2(255) NULL,
       plz                  INTEGER NOT NULL,
       city                 VARCHAR2(255) NULL,
       contact_person       VARCHAR2(255) NULL,
       main_office          NUMBER NOT NULL,
       telephone            VARCHAR2(255) NULL,
       fax                  VARCHAR2(255) NULL,
       mail                 VARCHAR2(255) NULL,
       website              VARCHAR2(255) NULL,
       mobile_no            VARCHAR2(255) NULL
);
 
Was silent_worrier meinte ist folgendes: Du brauchst nur eine Tabelle, also zB Deine Tabelle tdb_Transporter. Dort fügst Du ein Feld zB: link_main_office Integer Not Null ein. In dieses Feld trägst Du ein:

1) wenn es ein Hauptsitz ist: Die ID des Datensatzes selber (Also der Hauptsitz zeigt quasi auf sich selbst)
2) Wenn es eine Niederlassung ist die ID des zugehörigen Hauptsitzes
 
Genau. Dann brauchst du nämlich nicht zwei Tabellen, sondern nur eine. Und wenn in link_main_office eben 0 steht, dann weisst du, dass es sich um einen Hauptsitz handelt, der nicht angezeigt werden muss.
 
Aha und wie kann ich dann mit einem Select abfragen, dass ich zu einem Hauptsitz alle Niederlassungen angezeigt bekomme?

SELECT * FROM tdb_transporter where link_main_office = transporter_id

oder was wäre der richtige Syntax?
 
Zurück