Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Creare relazioni tra tabelle in mysql

    Qualcuno sa spiegarmi come si realizza un relazione tra tabelle in mysql su tabelle già realizzate e su tabelle ancora da realizzare?

    Ho fatto una ricerca su internet ma in merito non ho trovato nulla.

    Grazie,
    ciao.

  2. #2
    C'e poco da spiegare. si tratta di di associare due campi tra tabelle che abbiano lo stesso valore in modo da avere un riferimento per i dati contenuti. Es.:
    codice:
    clienti              ordine               merce      
           
    id_cliente  <--+     id_ordine      +-->  id_merce
    nome            \--> id_cliente    /      descrizione
    cognome              id_merce   <-+       prezzo
    indirizzo            data_consegna        quantita
    Come vedi clienti.id_cliente e' in relazione con ordine.id_cliente
    mentre merce.id_merce e' in relazione con ordine.id_merce.

    quando farai la query sara' semplice estrarre i dati che ti pare. Es:
    codice:
    SELECT *
    FROM ordine
    left join clienti on clienti.id_cliente = ordine.id_cliente
    left join merce on merce.id_merce = ordine.id_merce
    where clienti.nome = 'pippo'
    In questo modo avresti ottenuto la lista della spesa del cliente 'pippo'

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Per quanto riguarda l'estrazione so come procedere, il mio problema è quando vado a realizzare una tabella nuova, ho letto in giro che al momento della creazione della tabella devo scrivere qualcosa come foreign key. Mentre se invece le tabelle sono già create, non c'è nulla da modificare o attivare su di esse?

  4. #4
    Originariamente inviato da Bartjsp
    Per quanto riguarda l'estrazione so come procedere, il mio problema è quando vado a realizzare una tabella nuova, ho letto in giro che al momento della creazione della tabella devo scrivere qualcosa come foreign key. Mentre se invece le tabelle sono già create, non c'è nulla da modificare o attivare su di esse?
    Una relazione tra tabelle non e' propriamente una foreign key, tra l'altro diaponibili solo sul motore InnoDB. La foreign key e' una chiave esterna, cioe' una chiave della tabella "a" residente su tabella "b" con cui e' vincolata da svariate condizioni.

    La puoi mettere dove e quando serve sia alla creazione delle tabelle sia successivamente con alter table.

    Vedi il riferimento del manuale al proposito.

    http://dev.mysql.com/doc/refman/5.0/...nstraints.html


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    460
    Devi usare la sintassi ALTER TABLE. E' qualcosa del genere:
    codice:
    ALTER TABLE `nomeTabella` ADD CONSTRAINT `nomeForeignKey` FOREIGN KEY (`campoTabella`) REFERENCES `tabellaCuiPunta` (`campoDellaTabellaCuiPunta`)
    Eventualmente puoi aggiungere altri parametri come ad esempio:
    codice:
     ON DELETE CASCADE ON UPDATE CASCADE,
    Esempio:
    codice:
    ALTER TABLE `ordini` ADD CONSTRAINT `clienteDeveEsistere` FOREIGN KEY (`IDCliente`) REFERENCES `clienti` (`ID`)
    Si presume in questo caso che tu abbia una tabella clienti con un campo ID e una tabella ordini con campo IDCliente.

    I campi su cui crei foreign key devono avere un indice o la creazione della foreign key fallisce.

    Le foreign key sono supportate putroppo solo per tabelle di tipo InnoDB, una delle gravi e assurde pecche di MySQL.

    PS: scusa Piero ma secondo me non bisogna insegnare quelle schifezze delle "relazioni". SQL prevede le FOREIGN KEY, che MySQL non le supporti su tabelle di base come le MyISAM e' un problema di MySQL che va esposto e spiegato, altrimenti la gente pensa che sia 'normale'.

    Secondo me l'assenza di FOREIGN KEY su un DBMS non va molto lontano dall'assenza della carrozzeria da una macchina.
    There are 10 types of people in the world - those who understand binary and those who don't.

  6. #6
    Secondo me l'assenza di FOREIGN KEY su un DBMS non va molto lontano dall'assenza della carrozzeria da una macchina.
    Hai proprio ragione... Si risolverebbero un milione e mezzo di problemi....

    Ciao boiz!!!!
    Catastrofi del nostro secolo (non in ordine...):
    1) Hiroshima 45;
    2) Cernobyl 86;
    3) Windows...!

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.