none
Chiarimento su sql server 2008 r2 RRS feed

  • Domanda

  • Ciao a tutti! e buon anno 2011!!!

    Vorrei chiedere una questione legata alle relazioni tra tabelle in sql server 2008 r2 (Management studio). In sostanza ho 3 tabelle composte cosi:

    Tabella Destinazioni:

    • id_destinazione (tipo int, PK, non ammette valori Null, è di tipo contatore)
    • NomeDestinazione (tipo nchar(10), non ammette valori Null)
    • utente (nchar(10), non ammette valori Null)
    • id_struttura (nchar(10), non ammette valori Null)
    • id_catalogo (nchar(10), non ammette valori Null)

    Tabella Strutture:

    • id_struttura (tipo int, PK, non ammette valori Null, è di tipo contatore)
    • id_catalogo (nchar(10), non ammette valori Null)
    • NomeStruttura (nchar(10), non ammette valori Null)
    • id_destinazione (nchar(10), non ammette valori Null)

    Tabella Cataloghi:

    • id (tipo int, PK, non ammette valori Null, è di tipo contatore)
    • NomeCatalogo (nchar(10), non ammette valori Null)
    • PercorsoFile (nchar(10), non ammette valori Null)
    • Visibile (bit, non ammette valori Null) questo deve restituire un valore "true/false"
    • DataCaricamento (datetime, non ammette valori Null)
    • id_destinazione (nchar(10), non ammette valori Null)
    • utente (nchar(10), non ammette valori Null)
    • DataViaggio (datetime, non ammette valori Null)
    • prezzo (nchar(10), non ammette valori Null)
    • id_struttura (nchar(10), non ammette valori Null)

    Ora le tabelle dovrebbero essere relazionate in questo modo:

    Nella tabella destinazioni ci sono tutte le destinazioni (appunto). Per ogni destinazione ci sono una o piu strutture. Per ogni struttura ci sono uno o piu cataloghi.

     

    Quindi le relazioni sono di uno-a-molti. Il problema è che non riesco a stabilire le relazioni, credo di sbagloiare qualcosa in alcuni tipi di campi ma non so bene cosa, essendomi avvicinato al mondo sql server praticamente da un paio di giorni (prima usavo access)

     

    Secondo voi dove sbaglio? Inoltre nel diagramma delle relazioni noto che tutte le relazioni hanno le chiavi agli estremi, quando dovrei trovare invece da una parte la chiave mentre dall'altra il simbolo "infinito"....

     

    Attendo intrepido i vostri suggerimenti....e auguri ancora!


    Ricardo Bagnati - www.vicenzasoftware.com
    • Spostato Mila Daniel Ovidiu venerdì 31 dicembre 2010 12:23 sql (Da:ADO.NET, Entity Framework e LINQ)
    venerdì 31 dicembre 2010 11:17

Risposte

  • Tabella Destinazioni:

    * id_destinazione (tipo int, PK, non ammette valori Null, è di tipo contatore) * NomeDestinazione (tipo nchar(10), non ammette valori Null) * utente (nchar(10), non ammette valori Null) * id_struttura (nchar(10), non ammette valori Null) * id_catalogo (nchar(10), non ammette valori Null)

    Tabella Strutture:

    * id_struttura (tipo int, PK, non ammette valori Null, è di tipo contatore)
    * id_catalogo (nchar(10), non ammette valori Null) * NomeStruttura (nchar(10), non ammette valori Null) * id_destinazione (nchar(10), non ammette valori Null)

    Tabella Cataloghi:

    * id (tipo int, PK, non ammette valori Null, è di tipo contatore)
    * NomeCatalogo (nchar(10), non ammette valori Null) * PercorsoFile (nchar(10), non ammette valori Null) * Visibile (bit, non ammette valori Null) questo deve restituire un valore "true/false" * DataCaricamento (datetime, non ammette valori Null) * id_destinazione (nchar(10), non ammette valori Null) * utente (nchar(10), non ammette valori Null) * DataViaggio (datetime, non ammette valori Null) * prezzo (nchar(10), non ammette valori Null) * id_struttura (nchar(10), non ammette valori Null)

    Ora le tabelle dovrebbero essere relazionate in questo modo:

    Nella tabella destinazioni ci sono tutte le destinazioni (appunto). Per ogni destinazione ci sono una o piu strutture. Per ogni struttura ci sono uno o piu cataloghi.

    Poichè nella tabella destinazioni c'è ID_Struttura, c'è una sola struttura per ogni destinazione e, poichè c'è id_catalogo c'è un solo catalogo per ogni destimnazione.

     

    Quindi le relazioni sono di uno-a-molti. Il problema è che non riesco a stabilire le relazioni, credo di sbagloiare qualcosa in alcuni tipi di campi ma non so bene cosa, essendomi avvicinato al mondo sql server praticamente da un paio di giorni (prima usavo access)

    Se una destinazione può avere più strutture, allora IDStruttura non può comparire nella tabella destinazioni. Si tratta soilo di capire se una struttura può appartenere ad una sola destinazione o no.
    Se una struttura può appartenere ad una sola destinazione, allora la relazione è uno a molti e devi mettere l'iddestinazione al'interno delle strutture.
    Se una struttura può appartenere a più destinazioni, allora ti serve una tabella di relazione molti a molti con i due campi id_destinazione e id_struttura.

    Analogo discorso va fatto per il resto.

    • Contrassegnato come risposta Ricardo78 domenica 2 gennaio 2011 12:54
    venerdì 31 dicembre 2010 15:09

Tutte le risposte

  • Tabella Destinazioni:

    * id_destinazione (tipo int, PK, non ammette valori Null, è di tipo contatore) * NomeDestinazione (tipo nchar(10), non ammette valori Null) * utente (nchar(10), non ammette valori Null) * id_struttura (nchar(10), non ammette valori Null) * id_catalogo (nchar(10), non ammette valori Null)

    Tabella Strutture:

    * id_struttura (tipo int, PK, non ammette valori Null, è di tipo contatore)
    * id_catalogo (nchar(10), non ammette valori Null) * NomeStruttura (nchar(10), non ammette valori Null) * id_destinazione (nchar(10), non ammette valori Null)

    Tabella Cataloghi:

    * id (tipo int, PK, non ammette valori Null, è di tipo contatore)
    * NomeCatalogo (nchar(10), non ammette valori Null) * PercorsoFile (nchar(10), non ammette valori Null) * Visibile (bit, non ammette valori Null) questo deve restituire un valore "true/false" * DataCaricamento (datetime, non ammette valori Null) * id_destinazione (nchar(10), non ammette valori Null) * utente (nchar(10), non ammette valori Null) * DataViaggio (datetime, non ammette valori Null) * prezzo (nchar(10), non ammette valori Null) * id_struttura (nchar(10), non ammette valori Null)

    Ora le tabelle dovrebbero essere relazionate in questo modo:

    Nella tabella destinazioni ci sono tutte le destinazioni (appunto). Per ogni destinazione ci sono una o piu strutture. Per ogni struttura ci sono uno o piu cataloghi.

    Poichè nella tabella destinazioni c'è ID_Struttura, c'è una sola struttura per ogni destinazione e, poichè c'è id_catalogo c'è un solo catalogo per ogni destimnazione.

     

    Quindi le relazioni sono di uno-a-molti. Il problema è che non riesco a stabilire le relazioni, credo di sbagloiare qualcosa in alcuni tipi di campi ma non so bene cosa, essendomi avvicinato al mondo sql server praticamente da un paio di giorni (prima usavo access)

    Se una destinazione può avere più strutture, allora IDStruttura non può comparire nella tabella destinazioni. Si tratta soilo di capire se una struttura può appartenere ad una sola destinazione o no.
    Se una struttura può appartenere ad una sola destinazione, allora la relazione è uno a molti e devi mettere l'iddestinazione al'interno delle strutture.
    Se una struttura può appartenere a più destinazioni, allora ti serve una tabella di relazione molti a molti con i due campi id_destinazione e id_struttura.

    Analogo discorso va fatto per il resto.

    • Contrassegnato come risposta Ricardo78 domenica 2 gennaio 2011 12:54
    venerdì 31 dicembre 2010 15:09
  • Grazie Massimo, ho seguto il tuo consiglio ed ho ottenuto quello che volevo.

    Ho provato a fare un inserimento in ogni tabella, con questo risultato:

    Tabella Destinazioni tutto ok,

    Tabella Strutture mi ha generato questo errore:

    < L'istruzione INSERT in conflitto con il vincolo FOREIGN KEY "FK_tblStrutture2_tblDestinazioni2". Il conflitto si verificato nella tabella "dbo.tblDestinazioni2", column 'id_destinazione' del database "DbCataloghi2". >

     

    mentre per la tabella cataloghi da quest'errore:

    < I dati di tipo string o binary verrebbero troncati. >

    ma qui penso sia dovuto a che non ci sono dati nella tabella strutture (casomai ci penso dopo)

    Nel diagramma delle relazioni ho tutte le relazioni ok, nel senso che partendo da sinistra mi trovo:

    TblDestinazioni -- uno-a-molti --> TblStrutture -- uno-a-molti --> TblCataloghi

    i campi sono (Destinazioni)
    id_destinazione
    NomeDestinazione
    utente
    id_struttura

    (strutture)
    id_struttura
    id_catalogo
    NomeStruttura
    id_destinazione

    (cataloghi)
    id
    NomeCatalogo
    PercorsoFile
    Visibile
    DataCaricamento
    utente
    DataViaggio
    prezzo
    id_struttura

     

     


    Ricardo Bagnati - www.vicenzasoftware.com
    venerdì 31 dicembre 2010 16:08