Entra

View Full Version : [MySQL]Come si risolve una N a M in MySQL?


Horizont
15-11-2009, 12:12
Ciao a tutti raga, sono nuovo nel mondo del MySQL (che poi dovrò collegare a PHP 5.3 per creare un'applicazione per l automatizzazione di domande online)

Vi spiego il problema cercando di essere il più chiaro possibile.

Il mio database è composto, per ora, da 3 tabelle, anzi diciamo 2...STUDENTE ed ESAME.
La prima ha una mera lista di studenti con chiave primaria MATRICOLA e altri campi che identificano lo studente (CORSO DI LAUREA, ANNO ACCADEMICO, NOME e COGNOME ovviamente, ecc). La seconda, ESAMI, ha una mera lista degli esami con ID come chiave primaria (un semplice int autoincrementato). Ora io dovrei avere una terza tabella, chiamata CARRIERA che in qualche modo dovrebbe risolvermi la N a M tra STUDENTE ed ESAME...Io sono perfettamente a conoscenza di come si può fare sia teoricamente che, ad esempio, con Microsoft Access. Basta creare una terza tabella che ha come chiave primaria l'unione di STUDENTE.MATRICOLA ed ESAME.ID.

La mia domanda è, come si fa in MySQL una cosa del genere?

Ovviamente oltre alla nuova chiave primaria la tabella generata, CARRIERA, dovrà "prendere in prestito" anche alcuni campi e di STUDENTI e di ESAMI per rendere il tutto più chiaro.

Come posso fare?

Grazie a tutti in anticipo :) :)

vhost87
15-11-2009, 12:45
Ciao a tutti raga, sono nuovo nel mondo del MySQL (che poi dovrò collegare a PHP 5.3 per creare un'applicazione per l automatizzazione di domande online)

Vi spiego il problema cercando di essere il più chiaro possibile.

Il mio database è composto, per ora, da 3 tabelle, anzi diciamo 2...STUDENTE ed ESAME.
La prima ha una mera lista di studenti con chiave primaria MATRICOLA e altri campi che identificano lo studente (CORSO DI LAUREA, ANNO ACCADEMICO, NOME e COGNOME ovviamente, ecc). La seconda, ESAMI, ha una mera lista degli esami con ID come chiave primaria (un semplice int autoincrementato). Ora io dovrei avere una terza tabella, chiamata CARRIERA che in qualche modo dovrebbe risolvermi la N a M tra STUDENTE ed ESAME...Io sono perfettamente a conoscenza di come si può fare sia teoricamente che, ad esempio, con Microsoft Access. Basta creare una terza tabella che ha come chiave primaria l'unione di STUDENTE.MATRICOLA ed ESAME.ID.

La mia domanda è, come si fa in MySQL una cosa del genere?

Ovviamente oltre alla nuova chiave primaria la tabella generata, CARRIERA, dovrà "prendere in prestito" anche alcuni campi e di STUDENTI e di ESAMI per rendere il tutto più chiaro.

Come posso fare?

Grazie a tutti in anticipo :) :)

Una JOIN?

Horizont
16-11-2009, 13:34
mmmmmm....è che io ho lavorato spesso con interfaccia grafica quindi l SQL non è che lo conosca benissimo comunque credo di aver risolto.
Basta che la tabella GRADUATORIA abbia 2 chaivi esterne che sono STUDENTE.MATR e ESAME.ID e queste 2 chiavi esterne unite siano la chiave primaria di GRADUATORIA

quindi qualcosa del tipo

ALTER TABLE GRADUATORIA
ADD FOREIGN KEY (MATR2, ID2)
REFERENCES (STUDENTE.MATR, ESAME.ID)

e poi

ALTER TABLE GRADUATORIA
ADD PRIMARY KEY (MATR2, ID2)

penso possa andar bene così...