• User Newbie

    chiavi esterne... non ho capito bene, o si?

    Per prima cosa un ciao a tutti (questo è il mio primo post)

    Non ho ben capito se serva o no usare l'attributo foreign key.
    E sono pure a digiuno di MySql 8ho dato l'esame di Basi di dati l'anno scorso...)

    Cioè, so cos'è una chiave esterna, ma a quanto ho capito non si può realizzarla esplicitamente con l'attributo "foreign key" in mysql a meno di usare InnoDB.

    Quindi deduco che si possa fare a meno di tale attributo. Ho pensato questa cosa: con "foreign key" gli aggiornamenti ai valori della colonna della chiave esterna vengono fatti automaticamente dal sistema quando modifico la colonna della tabella riferita.
    Mentre senza tale attributo gli aggiornamenti devo farli io a manina. Cioè quando modifico la tabella esterna, devo pure modificare la colonna della tabella aventa la chiave esterna.

    giusto?

    -- Segolas


  • Super User

    Beh come foreign key si usa la chiave d un'altra tabella, e lechiavi in genere non si modificano. Ad esempio se ho due tabele, utenti e ruoli, fatte in questo modo:

    Utenti:
    -idUtente di tipo intero
    -nome varchar
    -cognome varchar
    -idRuolo intero

    Ruoli:
    -idRuolo intero
    -nomeRuolo intero

    Le chiavi sono gli id, e nella prima tabella idRuolo è chiave esterna. Tu potresti modificare il nome del ruolo, ma non per questo devi modificare l'id nell'utente. In genere nella seconda tabella tu modifichi il nome, ma mail l'id, quindi non dovresti avere problemi.

    Spero di non aver detto cavolate!

    Ciao!


  • User Newbie

    No, quello che hai detto è giusto. Sono io che mi sono espresso male.

    Intendevo dire (ho avuto conferme altrove) che per mantenere l'integrità referenziale, non serve per forza appoggiarsi all'attributo "foreign key" del mtore InnoDB. Ma si può fare tutto da php.

    L'uso di "foreign key" è solo un modo per automatizzare l'aggiornamento delle tabelle. di certo riduce anche la possibilità di errore e visto che viene fatto tutto dal sistema, non c'è il rischio di dimenticarsi...


  • Super User

    COn aggiornamento immagino intendi ad esempio la delete cascade? Non so se mysql ce l'ha... Si comuqnue ovviamente puoi fare tutto da programma, nellesempio che ho fatto prima, se vedi che nella tabella utente c'è un id che non corrisponde a nessun ruolo, c'è un errore da qualche parte...

    Ciao!


  • User Newbie

    si, intendevo quello. Mysql lo ha usando il motore InnoDB, mentre quello di default è MyIasm (occomeccavolo si scrive)