Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    relazione molti a molti: curiosità

    Ciao a tutti.
    Devo realizzare una tabella che contenga la famosa relazione N a N.
    Ho notato però che c'è molta ridondanza, faccio l'esempio di una tabella che unisce le visite che ID_utente ha fatto agli altri utenti:

    codice:
    ID_UTENTE | ID_UTENTE
    1              2
    1              16
    1              38
    1              3
    1              21
    1              4
    Questo significa che l'utente 1 ha visitato altri 6 utenti. Ma così arrivo ad avere una tabella veramente piena di record; basta avere 10 utenti che visitano 10 persone e ottengo subito 100 elementi!
    Sbaglio io a progettare e ci sono metodi più performanti? O è la via giusta?
    Pensavo a rendere la seconda colonna "tridimensionale" ma penso sia davvero osè come architettura.

  2. #2
    per tridimensionale intendo una cosa tipo
    codice:
    ID_UTENTE | ID_UTENTE
    1             4,5,8,44,23,56

  3. #3
    quando hai una relazione molti a molti si fa tutto più complicato...secondo le regole di normalizzazione di un database, in una relazione di questo tipo è meglio introdurre una tabella intermedia in modo da creare relazioni uno a molti. Nel tuo caso ad esempio la tabella intermedia potrebbe contenere il numero di relazioni per ogni utente tipo

    utente | numRel | ID
    --------------------
    1 | 6 | 1
    | | 2
    | | 8
    | | 16

    così fra la tabella utente e quella numRel si instaura una relazione uno ad uno e fra numRel e ID uno a molti.

  4. #4
    Ciao Emulman, ti ringrazio per la risposta.
    Effettivamente la tabella a cui mi riferivo era quella intermedia, che nella teoria deve collegare le due tabelle che hanno una relazione molti a molti.
    Nel tuo esempio però non ho capito a cosa possa servire NumRel.
    Facciamo che io sia l'utente con ID = 1 e incontro altri 6 utenti: quel numRel sarà 6? Ovvero indica il numero di relazioni?

  5. #5
    sì sì ci hai azzeccato....basta prelevarlo con un SELECT COUNT(*) AS numRel FROM tabella WHERE Utente=1
    cmq era un esempio, vedi un pò te...

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.