none
Chiavi Esterne Tabelle RRS feed

  • 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

    martedì 31 gennaio 2012 10:29

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
    martedì 31 gennaio 2012 12:38

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
    martedì 31 gennaio 2012 10:58
  • 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


    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
    martedì 31 gennaio 2012 11:35
  • 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?
    martedì 31 gennaio 2012 12:23
  • 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
    martedì 31 gennaio 2012 12:38
  • Grazie Francesco, ho risolto ;)

     

    Saluti

    martedì 31 gennaio 2012 19:30
  • Grazie Francesco, ho risolto ;)

     

    Saluti


    Bene, sono contento! :)

    Ciao!


    Francesco Milano // .NET & SQL Server Consultant // blog // twitter
    martedì 31 gennaio 2012 19:44