Principale utente con più risposte
Chiavi Esterne Tabelle

Domanda
-
Salve a tutti, ho un piccolo problema derivato dalla mia scarsa memoria.
Ho una tabella Libri e una Tabella Autori
I campi della tabella Libri sono questi
LibroID -----> CHIAVE PRIMARIA
Titolo
AutoreID ------->CHIAVE ESTERNA
I Campi della Tabella Autori sono questi
AutoreID ----> Chiave Primaria
Nome
Ora io devo fare una semplice query che mi restituisca il titolo del libro in base all'autore e per fare questo ho messo in relazione le due tabelle
Il problema e che se lascio gli id delle chiavi esterne nella tabella libri come NULL la query non funziona. Per farla funzionare bisogna inserire esattamente gli id corrispondenti nella tabella Autori.
L'utente fionale non sa ovviamente gli id della tabella autori e di conseguenza non può immettere i corrispondenti. Come posso fare?
Lo so è una domanda stupida ma sinceramente non lo ricordo lol
Saluti
Risposte
-
Io attualmente sto utilizzando il template di mvc3 con entity framework code first....quindi ad esempio dovrei fare una dropdownlist nell'inserimento della tabella libri dove l'incaricato si sceglie i nomi degli autori giusto?
Si esatto.La chiave esterna AutoreID non deve essere null, l'elemento (Autore) del dropdownlist che verrà selezionato in fase di inserimento conterrà l'id dell'autore del libro.
Francesco Milano // .NET & SQL Server Consultant // blog // twitter
- Contrassegnato come risposta Mirko Pastorelli martedì 31 gennaio 2012 19:30
Tutte le risposte
-
Salve a tutti, ho un piccolo problema derivato dalla mia scarsa memoria.
Ho una tabella Libri e una Tabella Autori
I campi della tabella Libri sono questi
LibroID -----> CHIAVE PRIMARIA
Titolo
AutoreID ------->CHIAVE ESTERNA
I Campi della Tabella Autori sono questi
AutoreID ----> Chiave Primaria
Nome
Ora io devo fare una semplice query che mi restituisca il titolo del libro in base all'autore e per fare questo ho messo in relazione le due tabelle
Il problema e che se lascio gli id delle chiavi esterne nella tabella libri come NULL la query non funziona. Per farla funzionare bisogna inserire esattamente gli id corrispondenti nella tabella Autori.
L'utente fionale non sa ovviamente gli id della tabella autori e di conseguenza non può immettere i corrispondenti. Come posso fare?
Lo so è una domanda stupida ma sinceramente non lo ricordo lol
Saluti
cosa intendi con "L'utente fionale non sa ovviamente gli id della tabella autori e di conseguenza non può immettere i corrispondenti"?Suppongo che l'utente finale cerchi gli autori per nome, in quel caso avrai una query scritta tipo così:
SELECT lb.LibroID, lb.Titolo FROM Libri as lb INNER JOIN Autori AS au ON lb.AutoreID = au.AutoreID WHERE (au.Nome = @PNOMEAUTORE)
dove @PNOMEAUTORE è un parametro esterno che arriva ad esempio dal tuo front-end, ovviamente il filtro potrebbe essere una LIKE e non una corrispondenza esatta.AutoreID nella tabella Libri è corretto che non sia NULL, dato che un libro non si scrive da solo; nel caso di un autore anonimo probabilmente sarebbe corretto avere negli autori un autore "Anonimo" per mantenere normalizzato il database ed evitare di usare NULL nel campo di relazione (almeno dal mio punto di vista, ci sono varie correnti di pensiero su questo).
Un Libro potrebbe avere più Autori: in quel caso, se volessi gestirlo, dovresti creare una relazione Many-to-Many tra Libri ed Autori utilizzando una tabella aggiuntiva.
Spero di aver capito il tuo problema, nel caso prova a postare del codice e cerchiamo di darti una soluzione.
Ciao!
Francesco Milano // .NET & SQL Server Consultant // blog // twitter
-
Guarda il mio problema è più semplice di quando sembra :)
Ti posto gli screen così è più chiaro
TABELLA LIBRI
http://desmond.imageshack.us/Himg405/scaled.php?server=405&filename=tablibri.jpg&res=medium
TABELLA AUTORI
http://img214.imageshack.us/img214/6181/tabautori.jpg
Se io nel campo LibroID metto esattamente gli ID corrispondenti nella tabella Libri la query funziona. Se invece lascio i campi NULL o metto numeri diversi la query non funziona.
In sostanza quello che va a modificare la tabella non può sapere quale valore deve inserire nel campo LibroID e quindi non so come risolvere. Spero di essermi spiegato e grazie per il tuo aiuto :P
- Modificato Mirko Pastorelli martedì 31 gennaio 2012 11:25
-
Guarda il mio problema è più semplice di quando sembra :)
Ti posto gli screen così è più chiaro
TABELLA LIBRI
http://desmond.imageshack.us/Himg405/scaled.php?server=405&filename=tablibri.jpg&res=medium
TABELLA AUTORI
http://img214.imageshack.us/img214/6181/tabautori.jpg
Se io nel campo LibroID metto esattamente gli ID corrispondenti nella tabella Libri la query funziona. Se invece lascio i campi NULL o metto numeri diversi la query non funziona.
In sostanza quello che va a modificare la tabella non può sapere quale valore deve inserire nel campo LibroID e quindi non so come risolvere. Spero di essermi spiegato e grazie per il tuo aiuto :P
E' giusto che accada così.Il problema non sta nel campo AutoreID, dato che l'integrità referenziale ti impedisce di creare record con dati non esistenti nella tabella "server" (in questo caso Libri"), ma nel metodo che stai utilizzando per far inserire i dati agli utenti.
I dati dovresti farli inserire da un front end, anche molto semplice. Ad esempio un sito dynamic-data, di cui trovi un template in VisualStudio 2010, ti permette in poco tempo di creare un front-end "grezzo" ma funzionale con poco sforzo.
Se invece dai accesso alle tabelle direttamente è normale che chi inserisce debba sapere gli ID della tabella Libri.
Ciao!
Francesco Milano // .NET & SQL Server Consultant // blog // twitter
-
Io attualmente sto utilizzando il template di mvc3 con entity framework code first....quindi ad esempio dovrei fare una dropdownlist nell'inserimento della tabella libri dove l'incaricato si sceglie i nomi degli autori giusto?
In questo caso la chiave esterna AutoreID devo lasciarla null o no?- Modificato Mirko Pastorelli martedì 31 gennaio 2012 12:30
-
Io attualmente sto utilizzando il template di mvc3 con entity framework code first....quindi ad esempio dovrei fare una dropdownlist nell'inserimento della tabella libri dove l'incaricato si sceglie i nomi degli autori giusto?
Si esatto.La chiave esterna AutoreID non deve essere null, l'elemento (Autore) del dropdownlist che verrà selezionato in fase di inserimento conterrà l'id dell'autore del libro.
Francesco Milano // .NET & SQL Server Consultant // blog // twitter
- Contrassegnato come risposta Mirko Pastorelli martedì 31 gennaio 2012 19:30
-