Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Problem Datenbankmodell - Mehrfachbeziehungen

Dieses Thema im Forum "Datenmodellierung, Datenbank-Design" wurde erstellt von jsjs19xx, 1 Februar 2021.

  1. jsjs19xx

    jsjs19xx Neuer Benutzer

    Hallo Community,

    ich möchte mit Access eine Datenbank erstellen und habe ein grundsätzliches Problem mit den Beziehungen zwischen Tabellen.

    Beispielsweise sollen folgende Tabellen vorkommen: Firmen, Städte und Länder.

    Wie löse ich das in Access wenn folgende Kardinalitäten vorliegen:

    Länder zu Städte (1:n) -> In einem Land gibt es mehrere Städte
    Städte zu Firmen (1:n) -> In einer Stadt gibt es mehrere Firmen

    und jetzt das problematische:
    Länder zu Firmen (1:n) -> Es sollen Firmen auch lediglich Länder zugeordnet werden können.

    Wenn ich das in Access verknüpfe kommt da allerdings eine 1:1-Beziehung raus.



    Ich hoffe ihr könnt mir weiterhelfen.
    Viele Grüße
     

    Anhänge:

  2. akretschmer

    akretschmer Datenbank-Guru

    vielleicht so...

    Code:
    test=# create table laender(id int generated always as identity primary key, name text);
    CREATE TABLE
    test=*# create table staedte (id int generated always as identity primary key, land int references laender, name text);
    CREATE TABLE
    test=*# create table firmen (id int generated always as identity primary key, land int references laender, stadt int references staedte, name text, check ((case when land is null then 1 else 0 end) + (case when stadt is null then 1 else 0 end) = 1));
    CREATE TABLE
    test=*# insert into laender (name) values ('Land 1');
    INSERT 0 1
    test=*# insert into laender (name) values ('Land 2');
    INSERT 0 1
    test=*# insert into staedte (name) values ('Stadt 1');
    INSERT 0 1
    test=*# insert into staedte (name) values ('Stadt 2');
    INSERT 0 1
    test=*# insert into firmen (land, stadt, name) values (null, 1, 'Firma 1');
    INSERT 0 1
    test=*# insert into firmen (land, stadt, name) values (2, null, 'Firma 2');
    INSERT 0 1
    test=*# insert into firmen (land, stadt, name) values (2, 1, 'Firma 3');
    FEHLER:  neue Zeile für Relation »firmen« verletzt Check-Constraint »firmen_check«
    DETAIL:  Fehlgeschlagene Zeile enthält (3, 2, 1, Firma 3).
    test=*#
    
    Firma muß also zwingen entweder Stadt oder Land haben, nicht beides, nicht keines.
     
  3. jsjs19xx

    jsjs19xx Neuer Benutzer

    @akretschmer

    Hallo, danke für die rasche Antwort. Könntest du mir das bitte ins "deutsche" aufschlüsseln? Ich bin mir dem Code etwas aufgeschmissen. Bin blutiger Anfänger in Access.
    Viele Grüße
     
  4. akretschmer

    akretschmer Datenbank-Guru

    Das ist auch kein Access, sondern eine 'richtige' Datenbank: PostgreSQL.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden