Visualizzazione dei risultati da 1 a 7 su 7

Discussione: [SQL] Chiavi esterne

  1. #1

    [SQL] Chiavi esterne

    ho un problemino che non riesco a risolvere:
    quando faccio
    codice:
    delete from pi where id=10
    mi restituisce l'errore: "violazione della restrizione di chiave esterna"

    anche se ho inserito la clausola "DELETE ON CASCADE"

    il database è organizzato così:
    codice:
     
    CREATE table pi (
        ID_PI         INTEGER NOT NULL 
                    PRIMARY KEY GENERATED ALWAYS AS IDENTITY 
                    (START WITH 1, INCREMENT BY 1),
        NOME    VARCHAR(30), 
        INDIRIZZO   VARCHAR(30)
          );
    
    CREATE table progetti (
        ID_PROG         INTEGER NOT NULL 
                    PRIMARY KEY GENERATED ALWAYS AS IDENTITY 
                    (START WITH 1, INCREMENT BY 1),
        NOME    VARCHAR(30)
          );
    
    CREATE table relazioni (
        ID_relp         INTEGER NOT NULL 
                    PRIMARY KEY GENERATED ALWAYS AS IDENTITY 
                    (START WITH 1, INCREMENT BY 1),
    Foreign Key (fk_pi) references PI(ID_PI) on delete cascade,
    foreign Key (fk_idprog) references PROGETTI(ID_PROG) on delete cascade
          );
    praticamente ci sono tanti progetti che possono avere tanti pi, e ogni pi può appartenere a tanti progetti.
    però mi dà l'errore che ho scritto all'inizio quando provo a cancellare un pi, ho dimenticato qualcosa?
    Grazie e scusate se la domanda è un pò ingenua, ma ho letto da diverse fonti guide varie e mi sembra che il codice sia corretto!

  2. #2
    scusate se insisto... ma nessuno risponde perchè non lo sa,
    oppure è una domanda troppo stupida? In tal caso offendete pure, almeno so che il problema non è così grave, sono due giorni che son fermo su sto maledetto progetto! VVoVe:

  3. #3

    Re: [SQL] Chiavi esterne

    Originariamente inviato da wilma5941
    CREATE table relazioni (
    ID_relp INTEGER NOT NULL
    PRIMARY KEY GENERATED ALWAYS AS IDENTITY
    (START WITH 1, INCREMENT BY 1),
    Foreign Key (fk_pi) references PI(ID_PI) on delete cascade,
    foreign Key (fk_idprog) references PROGETTI(ID_PROG) on delete cascade

    );
    Nella tabella relazioni non vedo le colonne fk_pi e fk_idprog.
    Qualunque imbecille può inventare e imporre tasse. (Maffeo Pantaleoni)

  4. #4
    scusa è perchè ho scritto il codice a memoria, ho dimenticato quei due campi.
    ma la tabella la crea, il problema è quando provo a fare delete di un pi o di un progetto.

    non me lo fa fare perchè mi dà errore, e non capisco perchè!

    questo è il codice esattamente com'è nel mio progetto:
    codice:
    CREATE table progetti (
        ID_PROG         INTEGER NOT NULL 
                    PRIMARY KEY GENERATED ALWAYS AS IDENTITY 
                    (START WITH 1, INCREMENT BY 1),
        NOME    VARCHAR(30)    
          );
    
    CREATE table pi (
        ID_PI         INTEGER NOT NULL 
                    PRIMARY KEY GENERATED ALWAYS AS IDENTITY 
                    (START WITH 1, INCREMENT BY 1),
        NOME    VARCHAR(30), 
        COORDINATE   VARCHAR(30)
    
    	 );
    
    CREATE table relazionip (
        ID_RELP        INTEGER NOT NULL 
                    PRIMARY KEY GENERATED ALWAYS AS IDENTITY 
                    (START WITH 1, INCREMENT BY 1),
    fk_idprog INTEGER,
    fk_idpi INTEGER,
    Foreign Key (fk_idprog) references PROGETTI(ID_PROG)
    on delete cascade,
    Foreign Key (fk_idpi) references PI(ID_PI)
    ON DELETE CASCADE
          );
    se provo a fare DELETE FROM PI WHERE id_pi=12 mi dice
    VIOLAZIONE DELLA RESTRIZIONE DI CHIAVE ESTERNA

  5. #5
    Che database stai usando?
    Qualunque imbecille può inventare e imporre tasse. (Maffeo Pantaleoni)

  6. #6
    che databse stai usando?
    JavaDB integrato in NetBeans 6
    dovrebbe essere Derby.

    E' successa una cosa strana adesso:
    fra le varie sperimentazioni che ho fatto
    ho creato 3 tabelle del tutto simili a quelle che ho allegato,
    chiamandole libri,autori e relazioni.

    E se cancello un libro, vengono cancellate le relazioni in cui quel libro compare.
    E' proprio quello che voglio! Non capisco perchè con l'altra tabella non funziona

  7. #7
    Il problema potrebbe derivare da chiavi mancanti in qualche riga. Le foreign key sono utili per mantenere l'integrità dai dati, ma se per un qualunque motivo i dati non sono solidamente integrati tra loro poi si generano problemi.

    Non conosco Derby, ma per il futuro puoi ottenere aiuto prima e meglio specificando su quale back end stai lavorando. Solitamente qui si tende ad associare Php con MySQL, e a parte una base comune ANSI-SQL ci sono ancora parecchie differenze tra i vari dialetti proprietari.
    Qualunque imbecille può inventare e imporre tasse. (Maffeo Pantaleoni)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.