Pagina 1 di 11 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 101
  1. #1
    Utente di HTML.it L'avatar di dops
    Registrato dal
    Jul 2000
    Messaggi
    4,126

    [MySql] Come funziona la chiave foregin

    Ciao, MySql mi stà piacendo ma una cosa che non riesco a capire (probabilmente perchè vengo da database come access ) è l'introduzione della chiave Foregin. Praticamente non riesco a capire la sua utilità..
    Più o meno ho capito che è un oggetto introdotto da Mysql che dovrebbe referenziare due campi di due tabelle in modo da collegare le due tabelle tramite chiave primaria.. Ma in realtà a cosa serve?
    Cioè potrei anche non utilizzarlo, visto che tramite sql eseguendo una semplice join, collego molto semplicemente le tabelle che mi interessano. Se l'oggetto Foregin invece ha funzionalità visuali, cioè quelle di farmi vedere tramite un database manager come Mysql-front o EMS Mysql manager, non riesco proprio a vederne la funzionalità nè nell'uno nè nell'altro software..
    Probabilmente sono molto confuso e quindi dico cose confuse..
    Per questo vi chiedo se qualcuno di voi può spiegarmi cos'è e a cosa serve l'oggetto Foregin
    Voglio l'alt+s anche per FF

  2. #2
    Utente di HTML.it L'avatar di kuarl
    Registrato dal
    Oct 2001
    Messaggi
    1,093
    http://dev.mysql.com/doc/mysql/en/In...nstraints.html

    qui trovi di tutto di più.

    Tengo a precisare che le foreign key per il momento sono disponibili solo utilizzando tabelle di tipo innoDB, non le myIsam, inoltre non sono "oggetti" ma vincoli di integrità, il loro compito è per l'appunto mantenere l'integrità dei dati. Non sono state introdotte da mysql, fanno parte dell'sql standard.

    Se ci sono problemi con la doc non esitare a chiedere

  3. #3
    Utente di HTML.it L'avatar di dops
    Registrato dal
    Jul 2000
    Messaggi
    4,126
    Originariamente inviato da kuarl
    http://dev.mysql.com/doc/mysql/en/In...nstraints.html

    qui trovi di tutto di più.

    Tengo a precisare che le foreign key per il momento sono disponibili solo utilizzando tabelle di tipo innoDB, non le myIsam, inoltre non sono "oggetti" ma vincoli di integrità, il loro compito è per l'appunto mantenere l'integrità dei dati. Non sono state introdotte da mysql, fanno parte dell'sql standard.

    Se ci sono problemi con la doc non esitare a chiedere
    l'avevo già visto il link ma è in inglese e non ci capisco molto
    Ah bene, quindi servono a mantenere l'integrità dei dati..
    Senti mi fai il paragone con access? in access cosa si può definire come foreign key?
    Voglio l'alt+s anche per FF

  4. #4
    Utente di HTML.it L'avatar di kuarl
    Registrato dal
    Oct 2001
    Messaggi
    1,093
    di access ne so' poko... ti faccio un caso classico di vincolo di integrità:

    hai una tabella clienti e una ordini:

    clienti(ID, nome, cognome ecc)

    ID è chiave primaria

    ordini(ID, quantità, cliente, ecc)

    anche qui ID è chiave primaria ma su cliente viene applicato un vincolo di integrità (nel caso di mysql cliente deve essere un indice anche).

    Infatti il campo cliente deve assumere solo valori che sono presenti anche nella chiave primaria della tabella clienti. Non può esistere un ordine fatto da un cliente che non è presente nel database, altrimenti si viola un vincolo di integrità. Quando si viola un vincolo esistono anche delle politiche di reazione (vedi manuale ON DELETE e ON UPDATE)

  5. #5
    Utente di HTML.it L'avatar di dops
    Registrato dal
    Jul 2000
    Messaggi
    4,126
    Originariamente inviato da kuarl
    di access ne so' poko... ti faccio un caso classico di vincolo di integrità:

    hai una tabella clienti e una ordini:

    clienti(ID, nome, cognome ecc)

    ID è chiave primaria

    ordini(ID, quantità, cliente, ecc)

    anche qui ID è chiave primaria ma su cliente viene applicato un vincolo di integrità (nel caso di mysql cliente deve essere un indice anche).

    Infatti il campo cliente deve assumere solo valori che sono presenti anche nella chiave primaria della tabella clienti. Non può esistere un ordine fatto da un cliente che non è presente nel database, altrimenti si viola un vincolo di integrità. Quando si viola un vincolo esistono anche delle politiche di reazione (vedi manuale ON DELETE e ON UPDATE)
    Quindi si tratta di una semplice relazione con un vincolo di integrità referenziale, dove se nella tabella clienti vengono eliminati tot record che hanno una relazione (chiave foreign) con la tabella ordini, automaticamente vengono eliminati anche i record corrispondenti nella tabella ordini?
    Insomma una relazione con vincolo di integrità referenziale..
    o non ho capito niente?
    Voglio l'alt+s anche per FF

  6. #6
    Utente di HTML.it L'avatar di kuarl
    Registrato dal
    Oct 2001
    Messaggi
    1,093
    si, hai capito, xò vengono eliminati automaticamente solo se fra le politiche di reazione metti cascade, altrimenti di default compare un errore

  7. #7
    Utente di HTML.it L'avatar di dops
    Registrato dal
    Jul 2000
    Messaggi
    4,126
    Originariamente inviato da kuarl
    si, hai capito, xò vengono eliminati automaticamente solo se fra le politiche di reazione metti cascade, altrimenti di default compare un errore
    eh.. e qui ti voglio.. l'errore dove appare? semplicemente sulla pagina dinamica? o semplicemente l'errore è interno al database e quindi non mi mostra errori sulla pagina dinamica?
    Voglio l'alt+s anche per FF

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2004
    Messaggi
    33
    forse l'errore viene all'interno di mysql ma si può visualizzare con la funzione mysql_error() come tutti gli altri errori.. Non ne sono sicuro avevo solo letto la discussione e facevo una supposizione
    <?php Shawnem ?>

    www.kristinkreuk.it/shawn_guestbook/main.php - Il mio primo guestbook

  9. #9
    Utente di HTML.it L'avatar di kuarl
    Registrato dal
    Oct 2001
    Messaggi
    1,093
    Originariamente inviato da shawnem
    forse l'errore viene all'interno di mysql ma si può visualizzare con la funzione mysql_error() come tutti gli altri errori.. Non ne sono sicuro avevo solo letto la discussione e facevo una supposizione
    supponi bene, cmq dops provare non costa nulla

  10. #10
    Utente di HTML.it L'avatar di dops
    Registrato dal
    Jul 2000
    Messaggi
    4,126
    Originariamente inviato da kuarl
    supponi bene, cmq dops provare non costa nulla
    infatti ho provato e mi riporta un errore:
    Cannot add or update a child row: a foreign key constraint fails.
    Ho creato una chiave foign nella tabbella "Clienti" e faccio l'inserimento di due record: uno nella tabella "clienti" e l'altro nella tabella "ciclomotori". Quindi per ogni cliente deve essere associato un ciclomotore.... ma mi dà l'errore suddetto..
    Se provo ad eliminare la chiave forign, l'inserimento riesce perfettamente
    Voglio l'alt+s anche per FF

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 © 2025 vBulletin Solutions, Inc. All rights reserved.