View Full Version : Basi di dati: chiave straniera e vincolo riferenziale?
Matrixbob
22-04-2005, 13:04
Non mi ricordo + cosa è, e a cosa serve, la chiave straniera.
Anche col vincolo d'integrità referenziale ho qualche problema di memoria, mi ricordo che non potevo inserire tuple che non erano presenti in altre tabelle.
Qualcuno sa rinfrescarmi la memoria?!
Magari può servire anche ad altri.
TNX!
Matrixbob
27-04-2005, 10:11
Allora mi auto rispondo dopo aver consultato documentazione:
La chiave straniera è quella primaria che una tabella importa da un'altra tabella partecipante alla relazione (associazione) preferibilemnte binaria.
Il vincolo d'integrità referenziale è appunto dovuto a questa chiave straniera che deve esistere in almeno una tupla per poter essere inserita nella tabella che la importa. Altrimenti violo il vincolo suddetto.
Sono stato chiaro?!
Può servire ad altri?!
Boh io per la completezza del forum ci ho tenuto a terminarlo.
Grazie.
Forse volevi dire chiave esterna ?
Matrixbob
27-04-2005, 14:57
Forse volevi dire chiave esterna ?
Secondo il celeberrimo libro:
"Basi di dati: concetti, linguaggi e architetture" di Paolo Atzeni & Co. edito da McGraw-Hill un vincolo d'integrità referenziale (chiamato in letteratura inglese foreign key o referential integrity constraint) è soddisfatto se i valori sull'attributo X di ciascuna tupla dell'istanza R1 compaiono come valori di chiave primaria dell'istanza R2.
Qui la parola esterna non è menzionata, ma si sa che potrebbe essere un alias usato da qualche produttore od qualcun'altro in generale.
Sono concetti di sottile differenza, vedrò d'investigare meglio.
Matrixbob
27-04-2005, 15:04
Nella definizione a quanto pare non si tira in ballo entità deboli od entità forti di un base dati EER.
Probabilmente dipende dai casi di progettazione e dalla successiva traduzione in base dati relazionale.
Dove per relazionale intendo la base di dati in forma tabellare che tutti conosciamo rappresentata come in MySQL, mentre per EER intendo la base di dati "grafica" che serve a progettare basi di dati sensate e consistenti; quella del dott. Chen.
Matrixbob
27-04-2005, 15:17
Forse volevi dire chiave esterna ?
Chiave esterna è 1 altra cosa, dovrebbe esistere quando in una relazione od associazione compaiono entità debole ed entità forte.
L'entità debole è quella che non ha ragione d'esistere nel qualcaso non esistesse l'entità forte.
Es:
|studente con attributo (chiave primaria) matricola|--N--<studia>--1--|università con attributo (chiave primaria) nome|
La chiave dell'entità debole studente risulta essere la matricola + la chiave "esterna" dell'entità forte che la identifica e cioè università.
Di conseguenza le partecipazioni alla relationship saranno (1, 1) e (1, N) ovvero
1 studente può appartenere ad 1 ed 1 sola università,
mentre 1 università può avere almeno 1 studente ed ala massimo N studenti.
Come era modellato dalla nostra relazione sopra riportata.
Può filare così Cionci?! :)
http://www.foxitaly.com/risorsetecniche/Foreign_key_Index.htm ;)
Matrixbob
27-04-2005, 15:58
http://www.foxitaly.com/risorsetecniche/Foreign_key_Index.htm ;)
Mmmmm magari è una locuzione MicroZoz, io mi fido di più dei Prof. autori di quel libro. :rolleyes:
Che poi non è vera questa traduzione: "foreign key" --X--> "chiave esterna",
foreign -----> straniera !!!
Qui ha cannato il traduttore del testo.
L:DL
La traduzione letterale è chiave straniera...io ho sempre sentito dire chiave esterna... Poi è possibile che si possa dire in entrambi i modi... Sinceramente in italiano non l'ho vista molto...il libro di basi di dati su cui ho studiato è inglese ;)
Matrixbob
27-04-2005, 16:03
La traduzione letterale è chiave straniera...io ho sempre sentito dire chiave esterna... Poi è possibile che si possa dire in entrambi i modi... Sinceramente in italiano non l'ho vista molto...il libro di basi di dati su cui ho studiato è inglese ;)
Concordo, cmq se condividi la correzione di quanto detto nella mia teoria esposta sopra,
allora sarai anche in accordo con le mie locuzioni.
Altrimenti come andrebbe chiamata la key identificante l'entità debole?! Boh...
La chiave dell'entità debole studente risulta essere la matricola + la chiave "esterna" dell'entità forte che la identifica e cioè università.
Ora sinceramente questa situazione non me la ricordo molto...comunque andando a tradurre il tutto in una relazione diventa una semplice chiava primaria composta da due attributi...
Comunque la dizione italiana corrente credo proprio che sia chiave esterna...infatti se vai a vedere su Google e cerchi:
"foreign key" "chiave esterna"
oppure
"foreign key" "chiave straniera"
con la seconda ricerca trovi 6 o 7 documenti...direi pochini rispetto alle diverse centinaia della prima ricerca...
Matrixbob
27-04-2005, 16:19
Comunque la dizione italiana corrente credo proprio che sia chiave esterna...infatti se vai a vedere su Google e cerchi:
"foreign key" "chiave esterna"
oppure
"foreign key" "chiave straniera"
con la seconda ricerca trovi 6 o 7 documenti...direi pochini rispetto alle diverse centinaia della prima ricerca...
Scientificamente non significa niente, come quelli che p2p pensino indichi "punto a punto" ed invece indica "pari a pari".
Sarebbe un'altro esempio di propagazione d'errore, dovuta magari all'errata traduzione.
Scientificamente non significa niente, come quelli che p2p pensino indichi "punto a punto" ed invece indica "pari a pari".
Sarebbe un'altro esempio di propagazione d'errore, dovuta magari all'errata traduzione.
Dai...7 risultati contro migliaia ?!?!? In tutte le guide la chiamano chiave esterna (anche su html.it se vai a vedere)... Inoltre in molte università italiane la chiamano chiave esterna...basta cercare: università "chiave esterna"
Matrixbob
27-04-2005, 16:31
Dai...7 risultati contro migliaia ?!?!? In tutte le guide la chiamano chiave esterna (anche su html.it se vai a vedere)... Inoltre in molte università italiane la chiamano chiave esterna...
Boh non so, che dire, bisognerebbe vedere l'ideatore del EER come la chiama, ma non ho molta voglia di sbattermi ancora per ora... :fagiano:
Matrixbob
27-04-2005, 17:29
Dai...7 risultati contro migliaia ?!?!? In tutte le guide la chiamano chiave esterna (anche su html.it se vai a vedere)... Inoltre in molte università italiane la chiamano chiave esterna...basta cercare: università "chiave esterna"
Ah te lo spiego anche io se vuoi il perchè.
Perchè pochi usano il vincolo d'integrità referenziale (o sanno che esiste) e quello che trovi probabilmente è propio la chiave esterna.
Chi magari non conosce il vincolo d'integrità referenziale probabilmente pensa che la chiave esterna sia come la chiave straniera, ma non sempre combaciano le 2 cose.
Ah te lo spiego anche io se vuoi il perchè.
Perchè pochi usano il vincolo d'integrità referenziale (o sanno che esiste) e quello che trovi probabilmente è propio la chiave esterna.
Chi magari non conosce il vincolo d'integrità referenziale probabilmente pensa che la chiave esterna sia come la chiave straniera, ma non sempre combaciano le 2 cose.
Via su...pochi sanno del vincolo di integrità referenziale ? Ma se è una delle "basi" delle basi di dati... La chiave esterna è quella del vincolo di integrità referenziale... E' quella che si va a creare con FOREIGN KEYS nella CREATE TABLE...
Vuoi dire che i professori non sanno che esiste il vincolo di integrità referenziale ? :boh:
Vai a vedere su Google...
Matrixbob
27-04-2005, 18:14
Via su...pochi sanno del vincolo di integrità referenziale ? Ma se è una delle "basi" delle basi di dati... La chiave esterna è quella del vincolo di integrità referenziale... E' quella che si va a creare con FOREIGN KEYS nella CREATE TABLE...
Vuoi dire che i professori non sanno che esiste il vincolo di integrità referenziale ? :boh:
Vai a vedere su Google...
Non lo so il web è troppo esteso, è una "basi di dati federale"; avrei bisogno di esempi individuali.
Io non do mai niente per scontato e come dato di fatto gli errori scientifici e le ambiguità esistono e si propagano anche sui libri di testo.
CMQ i Prof autori del libro sopra citato infatti differenziano le 2 cose, almeno così mi pare.
Matrixbob
27-04-2005, 18:23
Da HTML.IT:
Cos'e' una chiave esterna?
Una chiave esterna e' un'insieme di attributi di un'entita' che identifica univocamente un'istanza di un'altra entita'.
Da Mike Tossy:
A proposito, quel campo di collegamento é tecnicamente chiamato "chiave straniera". [5] Una chiave dicesi " straniera" se essa è la chiave primaria in un'altra tabella. I sistemi relazionali supportano le relazioni 1:M tramite l'uso di questa tecnica.
Non si riesce a vedere che sono 2 concetti sottilmente diversi e se io ci vedo bene, uno mi sembra quasi un "soprainsieme" dell'altro.
Riguarda e fammi sapere...comunque non mi sembrava che ci fosse alcun riferimento a extern key sul mio libro di testo :boh:
La definizione di HTML.it non è molto precisa...cerca chiave esterna dentro il PDF:
ftp://ftp.disi.unige.it/person/GuerriniG/dispense/BDSp/progettazione6.pdf
Coincide con la tua definizione...
beppegrillo
27-04-2005, 18:52
Secondo il celeberrimo libro:
"Basi di dati: concetti, linguaggi e architetture" di Paolo Atzeni & Co. edito da McGraw-Hill un vincolo d'integrità referenziale (chiamato in letteratura inglese foreign key o referential integrity constraint) è soddisfatto se i valori sull'attributo X di ciascuna tupla dell'istanza R1 compaiono come valori di chiave primaria dell'istanza R2.
Qui la parola esterna non è menzionata, ma si sa che potrebbe essere un alias usato da qualche produttore od qualcun'altro in generale.
Sono concetti di sottile differenza, vedrò d'investigare meglio.
Per foreign key si intende chiave esterna
Matrixbob
27-04-2005, 19:32
Per foreign key si intende chiave esterna
Tutte le asserzioni non documentate in questo caso non vengono prese x buone.
Già è una cosa ambigua, ci mancherebbe il sentito dire ... ;)
beppegrillo
27-04-2005, 19:38
Tutte le asserzioni non documentate in questo caso non vengono prese x buone.
Già è una cosa ambigua, ci mancherebbe il sentito dire ... ;)
http://www.foxitaly.com/risorsetecniche/Foreign_key_Index.htm
http://www.latoserver.it/database/ddl/ddl2.php3
http://it.wikipedia.org/wiki/SQL
Non sò forse aspetti che ti risponda paolo atzeni in persona?
Matrixbob
27-04-2005, 19:39
La definizione di HTML.it non è molto precisa...cerca chiave esterna dentro il PDF:
ftp://ftp.disi.unige.it/person/GuerriniG/dispense/BDSp/progettazione6.pdf
Coincide con la tua definizione...
Ha riassunto in 6 slide le chiavi ... e per giunta ha "forse copiato" la definizione da qul libro che ti ho detto e che è stato pubblicato circa nel 1995/96.
Matrixbob
27-04-2005, 19:41
http://www.foxitaly.com/risorsetecniche/Foreign_key_Index.htm
http://www.latoserver.it/database/ddl/ddl2.php3
Non sò forse aspetti che ti risponda paolo atzeni in persona?
Link già menzionato da Cionci nella pagina prima ed analizzato da entrambi.
beppegrillo
27-04-2005, 19:42
Ha riassunto in 6 slide le chiavi ... e per giunta ha forse copiato la definizione da qul libro che ti ho detto che è stato pubblicato circa nel 1995/96.
Mi correggo ho visto che tu hai la prima edizione, io ho le edizioni successive, quelle divise in tomi.
La definizione di foreign key è identica.
Matrixbob
27-04-2005, 19:44
Mi correggo ho visto che tu hai la prima edizione, io ho le edizioni successive, quelle divise in tomi.
La definizione di foreign key è identica.
Sulla mia c'è scritto edizione ottobre 1996 e può essere così perchè io mi sono iscritto all'uni nel 96/97 ed ho usato quel libro al secondo anno.
Esattamente a pagina 36 ho la definizione.
beppegrillo
27-04-2005, 19:46
Sulla mia c'è scritto edizione ottobre 1996 e può essere così perchè io mi sono iscritto all'uni nel 96/97 ed ho usato quel libro al secondo anno.
Io ho questo http://www.ateneonline.it/LibroInfo.asp?item_id=1345
Cmq pure sul wikipedia foreign = esterna.
Se hai di stì problemi, manda una email a paolo atzeni, ricordo che rispondeva anche su un forum dell'università tre di roma, così ti chiarisci le idee definitivamente.
Matrixbob
27-04-2005, 19:48
Io ho questo http://www.ateneonline.it/LibroInfo.asp?item_id=1345
Cmq pure sul wikipedia foreign = esterna.
Se hai di stì problemi, manda una email a paolo atzeni, ricordo che rispondeva anche su un forum dell'università tre di roma, così ti chiarisci le idee definitivamente.
... e la definizione li sopra quale è?
Matrixbob
27-04-2005, 19:52
http://www.foxitaly.com/risorsetecniche/Foreign_key_Index.htm
http://www.latoserver.it/database/ddl/ddl2.php3
http://it.wikipedia.org/wiki/SQL
Non sò forse aspetti che ti risponda paolo atzeni in persona?
Sono tutti trattati già a livello relazionale di creazione tabelle etc, mentre IMHO questo è un problema che salta fuori durante la traduzione da EER a relazionale.
Come ho detto prima la chiave esterna per ora la sto vedendo come sottocaso della chiave straniera.
La chiave esterna nel caso di partecipazioni (1,1) e (1,N) tra entità debole ed entità forte.
La chiave straniera in generale anche con partecipazioni (1,N) e (1,N) tra entità.
beppegrillo
27-04-2005, 19:53
... e la definizione li sopra quale è?
Come già detto prima, la definizione è identica a quella che hai citato te.
Matrixbob
27-04-2005, 19:54
Io ho questo http://www.ateneonline.it/LibroInfo.asp?item_id=1345
Cmq pure sul wikipedia foreign = esterna.
Se hai di stì problemi, manda una email a paolo atzeni, ricordo che rispondeva anche su un forum dell'università tre di roma, così ti chiarisci le idee definitivamente.
Ti rendi conto che invece ragionare (o ad aiutarmi a ragionare) hai solo postato dei link (tra l'altro visibilissimi in google) e facendolo in modo relativamente ironico?!
IMHO, non era il caso.
Matrixbob
27-04-2005, 19:54
Come già detto prima, la definizione è identica a quella che hai citato te.
... ed allora non menziona chiave esterna! Stop.
beppegrillo
27-04-2005, 19:59
... ed allora non menziona chiave esterna! Stop.
Fermo là, cito dal libro:
"I vincoli interrelazionali più diffusi e significativi sono vincoli di integrità referenziale, come abbiamo visto nei paragrafi 2.2.4. In SQL per la loro definizione si usa l'apposito vincolo di foreign key, ovvero di chiave esterna "
Se hai ancora dubbi dopo questo, alzo le mani :D
Matrixbob
27-04-2005, 20:00
Fermo là, cito dal libro:
"I vincoli interrelazionali più diffusi e significativi sono vincoli di integrità referenziale, come abbiamo visto nei paragrafi 2.2.4. In SQL per la loro definizione si usa l'apposito vincolo di foreign key, ovvero di chiave esterna "
Se hai ancora dubbi dopo questo, alzo le mani :D
Scan della pagina che io faccio scan della mia! ;)
beppegrillo
27-04-2005, 20:03
Scan della pagina che io faccio scan della mia! ;)
Asd, sei terribile :fagiano:
Vado a cena, fra 30 minuti ti posto lo scan. :D
Matrixbob
27-04-2005, 20:14
http://img140.echo.cx/img140/7193/chiave2dn.gif
http://img140.echo.cx/img140/3235/chiave28bj.gif
Matrixbob
27-04-2005, 20:18
Asd, sei terribile :fagiano:
Vado a cena, fra 30 minuti ti posto lo scan. :D
Scusatemi le dimensioni, ma non so ridimensionarle. :(
Ma dov'è la definizione di chiave straniera ?
Matrixbob
27-04-2005, 20:33
Ma dov'è la definizione di chiave straniera ?
Qui la chiama solo in inglese "foreign key", come dovrebbe effettivamente essere e che magari avrebbe evitato appunto questa ambiguità nel caso fossero la stessa cosa.
Ci sono termini che non vanno tradotti ma lasciati tali, non come fanno i francesi che traducono tutto.
E' stato poi il Prof. a lezione a chiamarla chiave straniera.
Matrixbob
27-04-2005, 20:36
Ma voi le conoscevate le entità forti e deboli?
Come la chiamate la chiave di quella forte che identifica quella debole?!
Come le chiamate in generale quelle d'intergrità referenziale?!
Con lo stesso nome e cioè chiave esterna?!
Boh ...
beppegrillo
27-04-2005, 21:25
http://img3.exs.cx/img3/5769/1232gz.jpg
Matrixbob
27-04-2005, 22:04
Manco lo stesso esempio hanno tenuto, han cambiato tutto!! :)
CMQ domani se mi ricordo chiedo conferma al Prof.
L'unico dubbio che mi rimane è quello sulle partecipazioni.
Brigante
28-04-2005, 08:55
Confermo chiave esterna.
Ho l'impressione che si stiano confondendo due aspetti: quello della sistassi SQL e quello del significato semantico a livello di entità-relazioni. Foreign Key è il modo per esprimere un tipo di vincolo di integrità referenziale in SQL.
Il concetto di chiave forte/debole mi sembra appartenente allo schema entità-relazioni, mentre il concetto di foreign key allo schema relazionale, che quasi mai coincidono. Correggetemi se sbaglio :read:
In Italiano, soprattutto in ambito tecnico-scientifico, non sempre i termini in inglese vengono tradotti letteralmente e foreign key -> chiave esterna ne è un esempio.
Matrixbob
28-04-2005, 11:53
Ho l'impressione che si stiano confondendo due aspetti: quello della sistassi SQL e quello del significato semantico a livello di entità-relazioni. Foreign Key è il modo per esprimere un tipo di vincolo di integrità referenziale in SQL.
Il concetto di chiave forte/debole mi sembra appartenente allo schema entità-relazioni, mentre il concetto di foreign key allo schema relazionale, che quasi mai coincidono. Correggetemi se sbaglio :read:
In Italiano, soprattutto in ambito tecnico-scientifico, non sempre i termini in inglese vengono tradotti letteralmente e foreign key -> chiave esterna ne è un esempio.
CONFERMO!
Ho chiesto oggi ed il Prof. ha corretto il mio punto di vista.
Stiamo parlando di 2 cose inconfrontabili.
Una sta a livello progettazione e l'altra a livello implementazione.
Infatti solo a livello progettazione compaiono le entità e le relazioni, mentre solo a livello implementazione esistono vincoli d'integrità referenziali.
In seguito la chiave esterna sarà poi rappresentata con i vincoli d'integrità referenziali e quindi la chiave straniera.
In seguito la chiave esterna sarà poi rappresentata con i vincoli d'integrità referenziali e quindi la chiave straniera.
Cioè quindi la chiave straniera che è secondo il tuo professore ? La FOREIGN KEY della create table ? Ripeto...per me resta chiave esterna...come definita dal libro sopra...
Matrixbob
28-04-2005, 12:14
Cioè quindi la chiava straniera che è secondo il tuo professore ? La FOREIGN KEY della create table... Ripeto...epr me resta chiave esterna...come definita dal libro sopra...
Nel modello relazionale sono la stessa cosa.
Anche perchè ormai si parla di tabelle ed allora non ha nemmeno senso parlare di chiavi dipendenti o meno tra entità.
Chiamatela come volete.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.