Alemoppo grazie per la tua risposta, ma io non sono sicuro di aver capito.
tu hai usato una
FOREIGN KEY (id_amico) REFERENCES amici(id)
io invece una Primary key.
Da una guida che ho trovato ho letto che:
in un database relazionale le tabelle sono collegate tra loro tramite relazioni logiche, facendo si che righe di una tabella contengano riferimenti a valori chiave di un'altra tabella.
I principali aspetti dei punti di legame tra la cartella principale amici e quella secondaria votiMatematica2 sono:
- i campi coinvolti nella relazione devono essere di tipi simili.
- le tabelle devohno avere lo stesso Storage Engine
- la FOREIGN KEY deve essere contenuta nella tabella secondaria
- i campi coinvolti nella relazione devono essere sottoposti ad un indice di qualche tipo , sia nella tabella principale che in quella secondaria in modo da renderli accessibili in modo efficiente
1)per quest'ultima caratteristica l'indice di cui si parla nella tabella principale sarebbe la PK?
La mia tabella amici è questa
Codice:
CREATE TABLE amici (
id INT(20) AUTO_INCREMENT,
nome VARCHAR(20),
cognome VARCHAR(20),
telefono INT(10),
PRIMARY KEY(id)
);
voglio ora salvare i voti di matematica dei miei amici e perciò ho modificato secondo la guida la tua tabella:
Codice:
CREATE TABLE votiMatematica2 (
id_amico INT(20),
voto TINYINT,
index id_amico_ind(id_amico),
FOREIGN KEY (id_amico) REFERENCES amici(id),
);
2)Cosa è una Foreign KEY ? ha legato id_amico della tabella votiMatematica2 con id della tabella amici?
3)cosa fa l'indice? tramite id_amico, che si ricava da id (grazie alla Foreign Key) si ha il voto in matematica dell'amico?
4)ma quindi mettendo insieme le cose che mi hai detto mi viene da dire: è solo un modo di costruire le tabelle che devono essere legate tra loro?
per memorizzare i dati all'interno delle due tabelle utilizzo comunque questi due comandi per le due tabelle
Codice:
INSERT INTO amici (id,nome,cognome,telefono) VALUES ('1','Mario', 'Rossi', '12345689');
Codice:
INSERT INTO votiMatematica2 (id_amico,voto) VALUES ('1','7');
per leggere i dati cmq utilizzo due comandi diversi (per la tabella amici e per la tabella votiMatematica2)
5)che poi quando vai ad eliminare un campo si eliminano tutti i vari campi legati ad esso, è una conseguenza del fatto che si è costruito così il database, giusto?