Ho bisogno di una delucidazione...ditemi se quello che ho capito è corretto o se sbaglio qualcosa.
Facciamo conto che ho questa piccolissima base di dati (in realtà è parte di un esempio trovato su di un libro):
impiegato(IDimpiegato, nome, mansione, IDdipartimento)
dove: IDimpiegato è la CHIAVE ed IDdipartimento è la CHIAVE ESTERNA.
dipartimento(IDdipartimento, nome)
dove IDdipartimento è la CHIAVE.
Il relativo codice SQL dato dal libro dove ho tratto l'esempio è:
codice:
create table dipartimento
(
IDdipartimento int not null auto_increment primary key,
nome varchar(30)
) type=InnoDB;
create table impiegato
(
IDimpiegato int not null auto_increment primary key,
nome varchar(80),
mansione varchar(30),
IDdipartimento int not null references dipartimento(IDdipartimento)
) type=InnoDB;
La cosa che non mi torna troppo è il concetto di chiave esterna che usa questo libro.
L'altro libro usava il termine di chiave esterna per indicare un attributo di una tabella B che diventava parte della chiave di una tabella A per fare un esempio.
Ho una tabella STUDENTE ed una tabella UNIVERSITA', ogni riga della tabella STUDENTE sarà identificata dal campo matricola proprio di STUDENTE ma anche dalla chiave straniera nomeuniversità "importata" dalla tabella UNIVERSITA' in quanto altrimenti due studenti appartenenti ad università diverse potrebbero avere la stessa matricola.
Il libro dell'esempio precedente invece indica nella definizione delle tabelle il termine chiave esterna anche per indicare qualsiasi attributo pescato da un'altra tabella senza che questo alla fine non faccia efettivamente parte della chiave primaria della tabella in cui viene importato (come nell'esempio SQL da me riportato)...è giusto quello che ho capito o mi sfugge qualcosa?
Altra piccola cosa (sempre se non ho preso fischi per fiaschi prima)...per esempio io ho importato nella tabella impiegato l'attributo IDdipartimento dalla tabella dipartimento tramite l'istruzione:
IDdipartimento int not null references dipartimento(IDdipartimento)
ma questa cosa che significa esattamente? che nella tabella impiegato i valori del campo IDdipartimento devono essere coerenti con quelli del campo IDdipartimento della tabella dipartimento?
Per esempio non potrei inserire un valore in IDdipartimento di impiegato che non esiste già in IDdipartimento di dipartimento.
Ho capito bene? Vi prego di aiutarmi che lunedì prossimo ho l'esame e sono disperato.
Grazie
Andrea