Chiave primaria duplice

di il
6 risposte

Chiave primaria duplice

Ho costruito un database della mia libreria. Nella tabella AUTORI ho un campo ID (chiave primaria) e i campi COGNOME (Duplicati non ammessi) e NOME (Duplicati ammessi).
Questo per potere operare, tramite una query, la ricerca degli autori introducendo solo il cognome.
Mi sono arrangiato per discriminare gli autori omonimi aggiungendo al loro cognome uno o più asterischi, ma ovviamente ciò è riprovevole.
Ho eliminato gli asterischi dopo aver ammesso i duplicati per COGNOME e ho provato ad usare una chiave primaria duplice su COGNOME e NOME (nella mia biblioteca casalinga non ha autori che abbiano eguali entrambi questi termini), ma quando faccio le ricerche di un autore introducendo solo il cognome ottengo come risultato solo il primo degli autori omonimi per il cognome.
Che soluzioni alternative posso adottare?
Spero di essere stato comprensibile.

Recal

6 Risposte

  • Re: Chiave primaria duplice

    Elimina la chiave su Cognome+Nome, non serve a niente.
  • Re: Chiave primaria duplice

    Sarebbe opportuno allegare il file per poter capire la struttura e darti una mano.
  • Re: Chiave primaria duplice

    In realta' no: poiche' il numero di record saranno sicuremante meno di 10.000, con i computer di oggi anche una ricerca fullscan (tutta la tabella) e' questione di millisecondi.

    La cosa inizia ad essere significativa se si fanno join complesse, o qualche tabella contiene piu' di 10.000 record: 50.000/100.000.
    In questo caso l'esistenza di un indice diventa fondamentale.

    Ma in questo caso, come la 'Teoria Relazionale dei Dati insegna", l'indice ha senso se identifica UN'UNICO record.
    Ma qui andiamo sul complicato, perche' esistono anche gli indici NON UNIVOCI che servono FONDAMENTALMENTE per migliorare le performance di query complesse.

    Diciamo questo: non sarebbe male acquistare un testo sulla progettazione di database.
  • Re: Chiave primaria duplice

    i campi COGNOME (Duplicati non ammessi)
    implica che avrai una, e una sola, riga con un certo cognome.
    BAUDO,pippo
    BAUDO,alberto
    da come scrivi, non possono esistere.
    Se cerchi "BAUDO" troverai BAUDO,pippo, e basta

    Non comprendo cosa significhi
    "Mi sono arrangiato per discriminare gli autori omonimi aggiungendo al loro cognome uno o più asterischi, ma ovviamente ciò è riprovevole."
    Togli banalmente ogni vincolo su cognome e nome, puoi benissimo avere omonimi.
    Togli anche la chiave COGNOME+NOME

    Ritengo che ti stai ponendo problemi "inesistenti"
  • Re: Chiave primaria duplice

    In Access, anche non essendo un DBA (DataBase Administrator) è utile tenere in considerazione le opportunità di creare e utilizzare un indice per migliorare le prestazioni.
    In generale, è utile indicizzare i campi ove più frequentemente si effettuano le ricerche, quelli che vengono ordinati e quelli che vengono collegati ai campi di altre tabelle (nelle query su più tabelle).
    Gli indici possono accelerare l'esecuzione di ricerche e query, ma possono rallentare le prestazioni quando si aggiungono o aggiornano i dati.
    https://support.office.com/it-it/article/Creare-e-utilizzare-un-indice-per-migliorare-le-prestazioni-0a8e2aa6-735c-4c3a-9dda-38c6c4f1a0ce

    Qualora un campo venga impostato come chiave primaria, Access lo indicizza automaticamente.
    Possono comunque essere creati indici secondari, aggiuntivi, impostando il campo con la possibilità di avere valori duplicati o meno.
    https://support.office.com/it-it/article/Impedire-valori-duplicati-in-un-campo-b5eaace7-6161-4edc-bb90-39d1a1bc5576

    Da considerare che esistono diverse opportunità per migliorare le prestazioni del db ma, sicuramente, la scelta di creare indici, sui campi utilizzati più frequentemente, è una pratica da perseguire.
    https://support.office.com/it-it/article/Migliorare-le-prestazioni-di-esecuzione-di-Access-f6827763-bb5c-4f48-8457-7a14addab6be

    In generale, anche attraverso l'impiego del linguaggio SQL, si è in grado di memorizzare tanto i dati della tabella, quanto i dati di uno o più indici.
    In ogni caso, nella valutazione (sulla opportunità di impiego degli indici) si può tenere presente che: gli indici non dovrebbero essere usati sulle tabelle piccole, sui dati che richiedono modifiche frequenti e qualora si usino delle funzioni sugli attributi.


    Ora ritornando alla problematica in oggetto, in Access, non vi sono problematiche particolari a creare più indici di cui uno che identifichi in modo univoco ciascuna occorrenza ed uno ulteriore per il nominativo (magari con valori duplicati possibili) in modo da superare le omonimie.
    Non è solo "riprovevole" ma proprio da non perseguire, in nessun modo: l'aggiunta di asterischi quale discriminante.
    Attraverso la chiave primaria si sarà in grado di identificare il soggetto e le sue eventuali correlazioni.
    Si dovrà solo gestire, da codice, l'omonimia, effettuare un controllo sulla presenza del nominativo prima del suo inserimento e magari proporre le informazioni su quelli già in archivio.

    Una descrizione di impiego di diversi indici applicabili sono descritti, a livello didattico, nei seguenti link:.
    w3ii.com/it/ms_access/ms_access_indexing.html
    edscuola.it/archivio/handicap/ECDL/NV/498.htm

    e per il controllo sulle omonimie (dei nominativi) si possono leggere seguenti discussioni:
    https://www.iprogrammatori.it/forum-programmazione/access/controllo-nomi-campo-testo-t19432.html
    https://www.iprogrammatori.it/forum-programmazione/access/evita-duplicazone-nominativo-t19638.html
  • Re: Chiave primaria duplice

    willy55 ha scritto:


    In Access, anche non essendo un DBA (DataBase Administrator) è utile tenere in considerazione le opportunità di creare e utilizzare un indice per migliorare le prestazioni.
    In generale, è utile indicizzare i campi ove più frequentemente si effettuano le ricerche, quelli che vengono ordinati e quelli che vengono collegati ai campi di altre tabelle (nelle query su più tabelle).
    Gli indici possono accelerare l'esecuzione di ricerche e query, ma possono rallentare le prestazioni quando si aggiungono o aggiornano i dati.
    https://support.office.com/it-it/article/Creare-e-utilizzare-un-indice-per-migliorare-le-prestazioni-0a8e2aa6-735c-4c3a-9dda-38c6c4f1a0ce

    Qualora un campo venga impostato come chiave primaria, Access lo indicizza automaticamente.
    Possono comunque essere creati indici secondari, aggiuntivi, impostando il campo con la possibilità di avere valori duplicati o meno.
    https://support.office.com/it-it/article/Impedire-valori-duplicati-in-un-campo-b5eaace7-6161-4edc-bb90-39d1a1bc5576

    Da considerare che esistono diverse opportunità per migliorare le prestazioni del db ma, sicuramente, la scelta di creare indici, sui campi utilizzati più frequentemente, è una pratica da perseguire.
    https://support.office.com/it-it/article/Migliorare-le-prestazioni-di-esecuzione-di-Access-f6827763-bb5c-4f48-8457-7a14addab6be

    In generale, anche attraverso l'impiego del linguaggio SQL, si è in grado di memorizzare tanto i dati della tabella, quanto i dati di uno o più indici.
    In ogni caso, nella valutazione (sulla opportunità di impiego degli indici) si può tenere presente che: gli indici non dovrebbero essere usati sulle tabelle piccole, sui dati che richiedono modifiche frequenti e qualora si usino delle funzioni sugli attributi.

    Ora ritornando alla problematica in oggetto, in Access, non vi sono problematiche particolari a creare più indici di cui uno che identifichi in modo univoco ciascuna occorrenza ed uno ulteriore per il nominativo (magari con valori duplicati possibili) in modo da superare le omonimie.
    Non è solo "riprovevole" ma proprio da non perseguire, in nessun modo: l'aggiunta di asterischi quale discriminante.
    Attraverso la chiave primaria si sarà in grado di identificare il soggetto e le sue eventuali correlazioni.
    Si dovrà solo gestire, da codice, l'omonimia, effettuare un controllo sulla presenza del nominativo prima del suo inserimento e magari proporre le informazioni su quelli già in archivio.

    Una descrizione di impiego di diversi indici applicabili sono descritti, a livello didattico, nei seguenti link:.
    w3ii.com/it/ms_access/ms_access_indexing.html
    edscuola.it/archivio/handicap/ECDL/NV/498.htm

    e per il controllo sulle omonimie (dei nominativi) si possono leggere seguenti discussioni:
    https://www.iprogrammatori.it/forum-programmazione/access/controllo-nomi-campo-testo-t19432.html
    https://www.iprogrammatori.it/forum-programmazione/access/evita-duplicazone-nominativo-t19638.html

    Grazie Willi55, mi sei stato molto utile.
Devi accedere o registrarti per scrivere nel forum
6 risposte