Visualizzazione dei risultati da 1 a 6 su 6

Discussione: risultati query strani

  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    556

    risultati query strani

    ho un database con questa struttura:

    uffici:
    idufficio
    descrizione
    datainizio
    datafine

    collegattivita:
    idcollegattivita
    idattivita
    idufficio
    datainizio
    datafine

    attivita:
    idattivita
    descrizione

    personeattivita:
    idpersoneattivita
    idattivita
    matricola
    datainizio
    datafine

    persone:
    matricola
    cognome
    nome

    c'è una relazione molti a molti fra gli uffici e le attivita attraverso la tabella di collegamento collegaattivita
    c'è una relazione molti a molti fra le attività e le persone attraverso la tabella di collegamento personeattivita

    Il problema si presenta quando faccio una query per sapere le attivita di una persona e in quale ufficio le svolge: se un'attività viene fatta da più uffici viene ripetuta erroneamente!!

    Come posso fare per risolvere questo problema?

  2. #2
    Quote Originariamente inviata da gdota Visualizza il messaggio
    Il problema si presenta quando faccio una query per sapere le attivita di una persona e in quale ufficio le svolge: se un'attività viene fatta da più uffici viene ripetuta erroneamente!!

    Come posso fare per risolvere questo problema?
    posta la query che ti da errore
    Non si può risolvere un problema usando lo stesso modo di pensare che ha creato quel problema.
    Albert Einstein

    Siate Affamati, siate Folli, siate Onesti e siate Generosi

  3. #3
    Io fare così:
    Partire dalle persone, collego alle persone le varie attività passando per la tabella di raccordo (personeattivita) e poi resta da collegare l'ufficio.
    Il problema sta proprio nell'ultimo passaggio (come sottolinei anche tu) perché manca una relazione tra persone e uffici. Non hai una tabella che relaziona gli uffici con le persone che lo compongono?
    In sostanza manca la relazione che definisce l'afferenza delle persone agli uffici.
    Con le relazioni che hai a disposizione non riesci a rendere univoco il rapporto tra persona e ufficio perché manca questa informazione e quindi mettendo in join "giustamente" si ripete il record in ragione del fatto che l'attività è su più uffici anche se tu sai (manca però la tabella che lo dica) che una persona è di un certo ufficio e non anche dell'altro.
    Se ti stai approcciando all'argomento database dai uno sguardo anche a: SQL, database relazionale, regole di Codd, modello E-R, forme normali, normalizzazione con il mio testo: Semplicemente Database

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    556
    Quote Originariamente inviata da smartsql Visualizza il messaggio
    Io fare così:
    Partire dalle persone, collego alle persone le varie attività passando per la tabella di raccordo (personeattivita) e poi resta da collegare l'ufficio.
    Il problema sta proprio nell'ultimo passaggio (come sottolinei anche tu) perché manca una relazione tra persone e uffici. Non hai una tabella che relaziona gli uffici con le persone che lo compongono?
    In sostanza manca la relazione che definisce l'afferenza delle persone agli uffici.
    Con le relazioni che hai a disposizione non riesci a rendere univoco il rapporto tra persona e ufficio perché manca questa informazione e quindi mettendo in join "giustamente" si ripete il record in ragione del fatto che l'attività è su più uffici anche se tu sai (manca però la tabella che lo dica) che una persona è di un certo ufficio e non anche dell'altro.

    come posso risolvere? metto nella tabella personeattivita la chiave esterna idufficio?

  5. #5
    Quote Originariamente inviata da gdota Visualizza il messaggio
    come posso risolvere? metto nella tabella personeattivita la chiave esterna idufficio?
    Se una persona può afferire solo ed esclusivamente ad un ufficio potresti creare la tabella PersoneUffici e a questo punto la tabella CollegaAttività non ti servirebbe più perché attraverso le persone riesci a collegare anche gli uffici coinvolti in modo indiretto.

    Se invece una persona può afferire a più uffici allora si giustifica quello che vuoi fare tu di aggiungere nella personeattvità l'ufficio per il quale quella persona sta svolgendo quella attività dato che altrimenti non avresti nuovamente univocità per l'accoppiata persona/attività rispetto all'ufficio.

    Una cosa però evidenzierei: anche nel secondo caso secondo me ci starebbe bene una tabella personeUffici perché se una persona non partecipa a nessuna attività non sapresti a quale ufficio afferisce.

    Spero di essermi spiegato in maniera comprensibile.
    Se ti stai approcciando all'argomento database dai uno sguardo anche a: SQL, database relazionale, regole di Codd, modello E-R, forme normali, normalizzazione con il mio testo: Semplicemente Database

  6. #6
    Quote Originariamente inviata da smartsql Visualizza il messaggio
    Una cosa però evidenzierei: anche nel secondo caso secondo me ci starebbe bene una tabella personeUffici perché se una persona non partecipa a nessuna attività non sapresti a quale ufficio afferisce.
    c'è sempre qualcuno in ufficio che non fa GNente

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.