Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: Tantissimi records

  1. #1

    Tantissimi records

    Ciao,
    Sto iniziando a sviluppare un progetto nuovo per la gestione di anagrafiche.
    Il database dovrà contenere in un primo momento circa 10 milioni di records, e man mano salire, ma al momento non ho previsioni.

    Stavo pensando a sviluppare il codice per interrogare il database, però mi chiedevo se eventualmente può andare la struttura de database, e che é questa:

    codice:
    UTENTI		
    ID	Nome	
    1	Mario Rossi
    2	Paolo Bianchi
    3	Giuseppe Verdi
    		
    INDIRIZZO		
    ID	Foregin (ID_UTENTI)	Indirizzo
    1	1	                            Via Rossi
    2	2	                            Via Bianchi
    3	3	                            Via Verdi
    		
    DOCUMENTI INVIATI		
    ID	Foregin (ID_INDIRIZZO)	Tipo corrispondenza
    1	1	                            Avviso
    2	1	                            Avviso
    3	2	                            Invito
    4	2	                            Avviso
    5	3	                            Invito
    6	3	                            Avviso
    		
    FILES		
    ID	Foregin (ID_DOCUMENTI_INVIATI)	File
    1	1	                                          Avviso.PDF
    2	1	                                          Avviso.PDF
    3	2	                                          Invito.PDF
    4	2	                                          Avviso.PDF
    5	3	                                          Invito.PDF
    6	3	                                          Avviso.PDF
    La mia paura é che il sistema diventi lento...
    Può andare cosí come ho fatto?

  2. #2

    Re: Tantissimi records

    Originariamente inviato da cris.calleo
    Ciao,
    Sto iniziando a sviluppare un progetto nuovo per la gestione di anagrafiche.
    Il database dovrà contenere in un primo momento circa 10 milioni di records, e man mano salire, ma al momento non ho previsioni.


    La mia paura é che il sistema diventi lento...
    Può andare cosí come ho fatto?
    Se il tuo server non è un PIII con 128 Mb di ram, se le query sono scritte bene e le chiavi ben costruite, per stendere un server ci vogliono altro che milioni di record

    Come in tutte le cose, basta progettarle bene (o "non male"). Un Db e relativo codice di interrogazione, se fatti male, possono stendere un server anche se hanno solo 10000 record.

    La struttura che hai proposto comunque, di prim'acchito, sembra buona.


  3. #3
    Grazie.
    Ho solo un dubbio.
    Come faccio a relazionare per esempio corrispondenze con utenti?
    Per esempio voglio sapere mario rossi le corrispondenze che ha ricevuto.

    Posso aggiungere nella tabella DOCUMENTI_INVIATI un altra colonna con l'id dell'utente o esiste un'altra forma per effettuare la consultazione?

  4. #4
    Originariamente inviato da cris.calleo
    Grazie.
    Ho solo un dubbio.
    Come faccio a relazionare per esempio corrispondenze con utenti?
    Per esempio voglio sapere mario rossi le corrispondenze che ha ricevuto.

    Posso aggiungere nella tabella DOCUMENTI_INVIATI un altra colonna con l'id dell'utente o esiste un'altra forma per effettuare la consultazione?
    Il relazionamento tra tabelle avviene grazie alle chiavi esterne (FK).
    Metti una chiave esterna (PK della tabella utente) nella tabella DOCUMENTI_INVIATI.

    Comunque non capisco l'utilità della tabella INDIRIZZO, essendo che ha un solo attributo mettila direttamente nella tabella utente. Creare un'entità supplementare è utile quando questa ha più attributi e non si vuole andare a denormalizzare la struttura del database!

    Ti consiglio di realizzare uno schema del DB e poi valutare le parti da normalizzare.

  5. #5
    @maxmozz

    La tabella indirizzo la considero perchè potrei avere più di un indirizzo da associare all'utente.

    Come PK della tabella utente potrei considerare l'ID? Tanto quello non cambia...
    L'unico dubbio é come concatenare il tutto dall'utente al documento...

  6. #6
    Ah ok, capito. Ad ogni modo fai attenzione alle relazioni M:M (che necessitano di una tabella ponte)!

    Comunque si, nel tuo caso la Primary Key è l'ID dell'utente.

    Be', per la "concatenazione" basta che strutturi correttamente il DB e poi estrai i dati con le dovute query SQL. Ovviamente estrazioni da più tabelle vanno fatte con le JOIN.

    In questo caso dovresti mettere nella tabella DOCUMENTI_INVIATI una FK dalla tabella UTENTE!

  7. #7
    Mo sviluppo l'idea, spero che vada tutto liscio.
    Grazie a tutti per l'aiuto.

  8. #8

    Re: Tantissimi records

    Ho montato il database e mi servirebbe un aiutino se possibile.
    Come faccio a recuperare tutti i files di un utente?
    Mi spiego meglio: voglio creare una pagina dove attraverso un dropdown scelgo il cliente e mi siano mostrati tutti i documenti inviati e i relativi files associati al documento.

    Ci si riesce con la struttura che ho fatto? mi dareste un esempio di consultazione SQL?

    codice:
    UTENTI		
    ID	Nome	
    1	Mario Rossi
    2	Paolo Bianchi
    3	Giuseppe Verdi
    		
    INDIRIZZO		
    ID	Foregin (ID_UTENTI)	Indirizzo
    1	1	                            Via Rossi
    2	2	                            Via Bianchi
    3	3	                            Via Verdi
    		
    DOCUMENTI INVIATI		
    ID	Foregin (ID_INDIRIZZO)	Tipo corrispondenza
    1	1	                            Avviso
    2	1	                            Avviso
    3	2	                            Invito
    4	2	                            Avviso
    5	3	                            Invito
    6	3	                            Avviso
    		
    FILES		
    ID	Foregin (ID_DOCUMENTI_INVIATI)	File
    1	1	                                          Avviso.PDF
    2	1	                                          Avviso.PDF
    3	2	                                          Invito.PDF
    4	2	                                          Avviso.PDF
    5	3	                                          Invito.PDF
    6	3	                                          Avviso.PDF

  9. #9
    Sì ci si riesce. Devi usare le join. Se vuoi recuperare solo chi ha inviato documenti (e quindi i relativi documenti) usi le inner, altrimenti left

    codice:
    select u.nome, f.* 
    from utenti u
    inner join indirizzo i
    on i.foregin = u.id
    inner join documenti d
    on d.foregin = i.id
    inner join files f
    on f.foregin = d.id
    (foregin?? Foreign, forse )

  10. #10
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    Nel caso lo fai anche con delle join o delle sotto selects..

    oppurecon quna query diretta conoscendo l'id del cliente.

    select * from files where foreign ='[chiave dell'utente]'

    e hai il record set di tutti i files dell'utente ...

    altrimenti ti tocca fare delle join che sono pero' pesanti in quanto creano prodotti cartesiani tra le entità joinate... vedi 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.