# SQL Datenbank



## labelleamelie (16. Mai 2021)

Hallo, ich habe in Oracle nach der Fehlermeldung gesucht, da steht  "Ein Fremdschlüsselwert hat keinen übereinstimmenden Primärschlüsselwert." , verstehe die Fehlermeldung nicht, da ich ja einen Primärschlüssel in table Adresse habe bzw. warum stimmt der Primärschlüssel nicht überein?



CREATE TABLE Adresse(
    AdrID                   INTEGER NOT NULL,
    LandID                  INTEGER NOT NULL UNIQUE,
    PLZ                     VARCHAR2(10) NOT NULL,
    HausNr                  VARCHAR2(10) NULL,
    Strasse                 VARCHAR2(30) NOT NULL,
    Stadt                   VARCHAR2(30) NOT NULL, 

    CONSTRAINT Adresse_AdrID_pk PRIMARY KEY (AdrID),
    CONSTRAINT Adresse_LandID_fk FOREIGN KEY (LandID) REFERENCES Land (LandID)

);

CREATE TABLE FerienWhng(
    FWID                    INTEGER NOT NULL,  
    Preis                   NUMBER(5, 2) NOT NULL,
    FWName                  VARCHAR2(30) UNIQUE,
    AnzZimmer               INTEGER NOT NULL,
    Groesse                 NUMBER(5, 2) NOT NULL,
    AdrID                   INTEGER NOT NULL,   

    CONSTRAINT FerienWhng__FWID_pk PRIMARY KEY (FWID),
    CONSTRAINT size_FerienWhng_AnzZimmer CHECK (AnzZimmer > 0),
    CONSTRAINT size_FerienWhng_FWName CHECK (LENGTH(FWName) >=2),
    CONSTRAINT FerienWhng_AdrID_fk FOREIGN KEY (AdrID) REFERENCES Adresse(AdrID)
);



INSERT INTO FerienWhng (FWID, Preis, FWName, AnzZimmer, Groesse, AdrID)
VALUES (0, 299.00, 'Dschungelbuch Ferienwohnung', 2, 72, 0);

wenn ich oben genannte einfügen will kommt die folgende Fehlermeldung:

ORA-02291: Integritäts-Constraint (DBSYS22.FERIENWHNG_ADRID_FK) verletzt - übergeordneter Schlüssel nicht gefunden


----------



## Robert Zenz (16. Mai 2021)

Dein Foreign-Key "FerienWhng_AdrID_fk" zeigt auf "Adresse(AdrID)", das bedeutet ein Datensatz mit der "AdrID" welche dui einfuegst *muss* vorhanden sein. Deswegen auch die Meldung "übergeordneter Schlüssel nicht gefunden", weil der uebergeordnete/master Schluessel von dem Datensatz  zu "FerienWhng" nicht existiert.


----------



## labelleamelie (16. Mai 2021)

Robert Zenz hat gesagt.:


> Dein Foreign-Key "FerienWhng_AdrID_fk" zeigt auf "Adresse(AdrID)", das bedeutet ein Datensatz mit der "AdrID" welche dui einfuegst *muss* vorhanden sein. Deswegen auch die Meldung "übergeordneter Schlüssel nicht gefunden", weil der uebergeordnete/master Schluessel von dem Datensatz  zu "FerienWhng" nicht existiert.


Ich habe es nicht ganz verstanden, Schluessel von dem Datensatz  zu "FerienWhng"  existiert ja, oder nicht? Bzw. ich weiß, nicht wie ich es lösen kann.


----------



## Gelöschtes Mitglied 65838 (16. Mai 2021)

du kannst nur auf einen Schlüssel deuten den es schon gibt


----------



## mihe7 (16. Mai 2021)

Der Foreign Key gibt eine Referenz an: "REFERENCES Adresse(AdrID)" Wenn Du in FerienWhng also eine AdrID angibst, *muss* in der Tabelle Adresse ein Datensatz mit eben dieser AdrID existieren. 

Du kannst also nicht hergehen uns sagen: hey, Ferienwohnung hat Adresse 5, wenn es Adresse 5 nicht gibt. Logisch, oder?


----------



## labelleamelie (16. Mai 2021)

Macht Sinn, habe bemerkt, dass die Datensätze zurückgesetzt wurden, ohne, dass ich es bemerkt habe. Wie kann man sowas verhindern?


----------



## Gelöschtes Mitglied 65838 (16. Mai 2021)

wie meinst du zurück gesetzt?


----------



## mihe7 (17. Mai 2021)

labelleamelie hat gesagt.:


> Macht Sinn, habe bemerkt, dass die Datensätze zurückgesetzt wurden, ohne, dass ich es bemerkt habe. Wie kann man sowas verhindern?


commit;


----------

