1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

Tabellen sinnvoll verbinden

Dieses Thema im Forum "Datenmodellierung, Datenbank-Design" wurde erstellt von Uri88, 16 Juli 2017.

  1. Uri88

    Uri88 Neuer Benutzer

    Hallo,


    ich bin Student und habe daher noch nicht viel Erfahrung mit Datenbankmodellierung. Die 3 Tabellen bereiten mir ziemliches Kopfzerbrechen und ich habe keine Ahnung wie ich diese sinnvoll verbinden kann.
    Ein Gebäude hat mehrere Ausgaben
    und Mehrere Ausgaben sind von einem Typen

    Wenn das meine Datenbank steht soll diese von der Funktionalität so sein, dass ich für je einen Gebäuden und Jahr eine Tabelle mit den Spalten
    Ausgabenbezeichnung und Kosten projezieren kann.



    [​IMG]

    [​IMG]


    [​IMG]

    Habt Ihr eine Idee wie ich das machen soll?
    Gruß
    Uri
     
  2. Uri88

    Uri88 Neuer Benutzer

    Hier nochmal der code

    Code:
    CREATE TABLE ImmobilienDB.Ausgabentyp(
        ID int NOT NULL PRIMARY KEY,
        Bezeichnung varchar(255)
    );
    
    
    --
    CREATE TABLE ImmobilienDB.Ausgaben_TV_Anschluesse(
        ID int NOT NULL PRIMARY KEY,
        Gebaeude int NOT NULL,
        Jahr int NOT NULL,
        Ausgabe int NOT NULL,
        Kosten double
    );
    
    CREATE TABLE ImmobilienDB.Ausgabentyp_TV_Anschluesse(
        Ausgabentyp int,
        Ausgabe int,
        FOREIGN KEY(Ausgabentyp) REFERENCES ImmobilienDB.Ausgabentyp(ID),
        FOREIGN KEY(Ausgabe) REFERENCES ImmobilienDB.Ausgaben_TV_Anschluesse(ID)
    );
    
    
    create table ImmobilienDB.Gebaeude(
        ID int NOT NULL PRIMARY KEY,
        gesamte_Wohnflaeche double NOT NULL,
        Wohnflaeche_ausser_EG double NOT NULL,
        Baujahr int,
        TV_Anschluesse int
    ); 
     
  3. akretschmer

    akretschmer Datenbank-Guru

    Die Verbindung geht dann mit einem JOIN. Hilft Dir das schon weiter?
     
  4. Uri88

    Uri88 Neuer Benutzer

    Nicht ganz. Ich weiß nicht wie ich das auf DDL-Ebene mache. Da wo ich 1:1 Kardinalitäten habe, kann ich den Primary Key als Foreign Key nehmen.
    Dann sind beide Seiten eindeutig und ich kann joinen. Hier habe Allerdings für jedes Gebäude mehrere Ausgaben nämlich pro Jahr und von mehrere Typen. Der Foreign Key für Ausgabentypen-Ausgaben müsste Ausgabentyp in Ausgaben sein und für Gebäude-Ausgaben Gebäude-ID in Ausgaben sein.

    Allerdings sind beide in Ausgaben nicht einzigartig und ich habe keine Ahnung wie ich das mache.
     
  5. akretschmer

    akretschmer Datenbank-Guru

    wo ist jetzt Dein Problem?

    Code:
    test=# create table gebaeude (id int primary key, name text);
    CREATE TABLE
    test=*# create table ausgaben(gebaeude_id int references gebaeude, ausgabe text, wert int);
    CREATE TABLE
    test=*# insert into gebaeude values (1, 'haus1');
    INSERT 0 1
    test=*# insert into gebaeude values (2, 'haus2');
    INSERT 0 1
    test=*# insert into ausgaben values (1, 'heizung', 10);
    INSERT 0 1
    test=*# insert into ausgaben values (1, 'muell', 20);
    INSERT 0 1
    test=*# insert into ausgaben values (1, 'wasser', 15);
    INSERT 0 1
    test=*# insert into ausgaben values (2, 'wasser', 15);
    INSERT 0 1
    test=*# select g.name, a.wert from gebaeude g left join ausgaben a on g.id = a.gebaeude_id;
     name  | wert
    -------+------
     haus1 |  10
     haus1 |  20
     haus1 |  15
     haus2 |  15
    (4 Zeilen)
    
    test=*#
    
     
  6. akretschmer

    akretschmer Datenbank-Guru

    Du kannst auch Foreign Keys definieren, wo in den Detailtabellen eben dieser FK mehrfach auftaucht. Das ist kein Problem.
     
  7. Uri88

    Uri88 Neuer Benutzer

    Wie genau geht es? Wenn der Foreign Key bei mir nicht auf Primary Key referenziert bekomme ich den folgenden Fehler:

    Code:
    ERROR 1005 (HY000): Can't create table 'ImmobilienDB.Ausgabentyp_TV_Anschluesse' (errno: 150)
    Code:
    -- CREATE TABLE Ausgabentypen
    CREATE TABLE ImmobilienDB.Ausgabentyp(
        ID int NOT NULL PRIMARY KEY,
        Bezeichnung varchar(255)
    );
    
    
    --CREATE TABLE Ausgaben_TV_Anschluesse
    CREATE TABLE ImmobilienDB.Ausgaben_TV_Anschluesse(
        ID int NOT NULL PRIMARY KEY,
        Gebaeude int NOT NULL,
        Jahr int NOT NULL,
        Ausgabe int NOT NULL,
        Kosten double
    );
    
    CREATE TABLE ImmobilienDB.Ausgabentyp_TV_Anschluesse(
        Ausgabentyp int,
        Ausgabe int,
        FOREIGN KEY(Ausgabentyp) REFERENCES ImmobilienDB.Ausgabentyp(ID),
        FOREIGN KEY(Ausgabe) REFERENCES ImmobilienDB.Ausgaben_TV_Anschluesse(Ausgabe)
    );
    
     
  8. akretschmer

    akretschmer Datenbank-Guru

    Kann nicht funktionieren, da dieses Feld kein PK ist. Vermutlich sollte das ID sein.
     
Die Seite wird geladen...

Diese Seite empfehlen