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

Referenzen

Dieses Thema im Forum "SQLite" wurde erstellt von pedri, 3 September 2019.

  1. pedri

    pedri Neuer Benutzer

    In der Vergangenheit habe ich meine Datenbanktabellen immer mit einem graphischen Tool wie SQLiteMaestro erstellt. Nun habe ich begonnen mein Datenbankdesign mittels SQL zu erstellen, was ich irgendwie einfacher und schneller finde. Nun stosse ich aber direkt auf ein Problem, was mir nicht klar ist:
    Code:
    DROP TABLE IF EXISTS components;
    DROP TABLE IF EXISTS fragility_groups;
    DROP TABLE IF EXISTS fragility_group_component;
    
    CREATE TABLE components (
        component_id INTEGER  NOT NULL,
        component    TEXT(15) NOT NULL,
        description  TEXT(255),
        /* Primary Keys */
        CONSTRAINT pk_components
                   PRIMARY KEY (component_id),
        /* UNIQUE */
        CONSTRAINT uq_component
                   UNIQUE (component)              
    );
    
    CREATE TABLE fragility_groups (
        fragility_group_id INTEGER  NOT NULL,
        fragility_group    TEXT(50) NOT NULL,
        description        TEXT(255),
        CONSTRAINT pk_fragility_groups PRIMARY KEY (fragility_group_id),
        CONSTRAINT uq_fragility_group UNIQUE (fragility_group)                
    );
    
    CREATE TABLE fragility_group_component (
        component_id       INTEGER NOT NULL,
        fragility_group_id INTEGER NOT NULL,
        /* Primary Keys */
        CONSTRAINT pk_fragility_group_component
                   PRIMARY KEY (component_id, fragility_group_id),
        /* Foreign Keys */
        CONSTRAINT fk_fragility_group_component_component_id
                   FOREIGN KEY (component_id)
                   REFERENCES components(component_id)
                   ON UPDATE CASCADE
                   ON DELETE RESTRICT,
        CONSTRAINT fk_fragility_group_component_fragility_group_id              
                   FOREIGN KEY (fragility_group_id)
                   REFERENCES fragility_groups(fragility_group_id)
                   ON UPDATE CASCADE
                   ON DELETE RESTRICT
    );
    
    INSERT INTO fragility_groups (fragility_group, description)
         VALUES ( 'TH001', 'blabla'),
                ('TH002', 'abcd');
    
    INSERT INTO components (component, description)
         VALUES ('1TH10D001', 'Nachwärmeabfuhrpumpe 1TH10D001'),
                ('2TH20D001', 'Nachwärmeabfuhrpumpe 2TH20D001');
    
    -- Das folgende sollte eine Fehlermeldung hervorrufen, da die beiden Werte nicht in den Tabellen vorhanden sind
    INSERT INTO fragility_group_component (component_id, fragility_group_id) VALUES (100,99);
    Interessanterweise wird in SQLiteMaestro der Eintrag in die Datenbank verweigert. In DBeaver sowie direkt mit sqlite3-Kommandozeile wird die Zeile in die Datenbank eingetragen, was m.E. nicht sein dürfte.
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Also in Postgresql wirft das dritte Insert einen Fehler:

    Code:
    test=*# INSERT INTO fragility_group_component (component_id, fragility_group_id) VALUES (100,99);
    FEHLER:  Einfügen oder Aktualisieren in Tabelle »fragility_group_component« verletzt Fremdschlüssel-Constraint »fk_fragility_group_component_component_id«
    DETAIL:  Schlüssel (component_id)=(100) ist nicht in Tabelle »components« vorhanden.
    
    Allerdings die beiden ersten auch, da jeweils die id-spalte im Insert fehlt - und diese aber NOT NULL ist.
     
  3. pedri

    pedri Neuer Benutzer

    @akretschmer Danke für deinen Test. Wie in meinem Beitrag geschrieben, lerne ich gerade mittels SQLite die Sprache SQL.
     
  4. akretschmer

    akretschmer Datenbank-Guru

    Ja, versteh.

    Wenn SQLite die beiden ersten Inserts ohne Fehlermeldung akzeptiert, und auch in sqlite-Kommandozeile das dritte Insert ohne Fehler durchläuft, solltest Du Dich aber vielleicht fragen, ob sqlite zum Erlernen von SQL wirklich sinnvoll ist. Immerhin erkennst Du als 'lernender Mensch' mehr Fehler als das DB-System ...
     
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