Chiave primaria base testo o numerico?

di il
8 risposte

Chiave primaria base testo o numerico?

Chiedo consiglio ho una tabella documenti dove inserirei fatture, ricevute etc
una tabelle corpodocumento ove inserirei le voci dei vari documenti

è meglio usare come chiavi univoche dei contatori o crearne una di tipo testuale????

8 Risposte

  • Re: Chiave primaria base testo o numerico?

    Sono due cose diverse.
    Le chiavi autoincrementanti sono molto veloci (indici piccoli, sia perchè sono interi, sia perchè con piccolo scatter), ma del tutto inadatti per la manutenzione.
    Fare backup & restore, fondere due archivi diversi può diventare tra il difficile e l'impossibile.
    Le chiavi "vere", cioè derivate effettivamente dal documento, al contrario rallentano, aumentano la dimensione degli indici.
    Però sono mano sante quando dovrai eliminare documenti, o farci manutenzione, ripristinarli eccetera.

    Personalmente le uso entrambe: autoincrementante (ser) come indice di selezione di una singola riga, "parlante" (char) come vera chiave.
    Talvolta sostituisco quest'ultima con UUID o simili (interi), però lì c'è il problema dello scatter, e va esaminato caso per caso.
  • Re: Chiave primaria base testo o numerico?

    Io uso sempre il contatore per tabelle con più campi. Se una tabella è monocampo (magari con pochi valori), uso il testo.
  • Re: Chiave primaria base testo o numerico?

    Vorrei semplicemente evitare il problema dell' arrivare a fine range....
    E poter archiviare i vecchi dati senza problemi
  • Re: Chiave primaria base testo o numerico?

    Emadragon ha scritto:


    Vorrei semplicemente evitare il problema dell' arrivare a fine range....
    E poter archiviare i vecchi dati senza problemi
    Dai non scherziamo credo tu non abbia la più pallida idea di quello che hai detto.
    Leggi le specifiche di un LONG se arrivi al limite... beh mi porrei dubbi sul perché...

    2,147,483,647
  • Re: Chiave primaria base testo o numerico?

    Se poi non bastasse un intero di tipo Long si può sempre passare al tipo BigInt, disponibile con la nuova versione di Access 2016 (per il supporto dei numeri su sistemi a 64 bit) in modo da avere un range fra -9,223,372,036,854,775,808 e 9,223,372,036,854,775,807
    https://blogs.office.com/en-us/2017/03/06/new-in-access-2016-large-number-bigint-support/
    http://www.eweek.com/database/microsoft-access-2016-makes-room-for-large-numbers
    https://stackoverflow.com/questions/1040884/update-sql-table-with-bigint-field-from-vba-ms-access
    http://www.utteraccess.com/forum/index.php?showtopic=2042574
  • Re: Chiave primaria base testo o numerico?

    Quindi no problem con ID Univoci autoincrementali
  • Re: Chiave primaria base testo o numerico?

    Vai tranquillo!!
  • Re: Chiave primaria base testo o numerico?

    Emadragon ha scritto:


    Quindi no problem con ID Univoci autoincrementali
    Possibili problemi ci sono, invece, per i motivi che ho espresso sopra.

    Supponi di dover fondere due archivi diversi (normalmente per motivi di manutenzione).
    Avrai collisioni nelle chiavi => non riuscirai a farlo, se non con programmoni custom immensi.

    I campi autoincrementanti sono belli e comodi, fino a quando non devi fare operazioni "strane", tipo estrarre un anno intero, lavorarlo, re-importarlo eccetera.

    Come detto se le prestazioni non sono importanti (cioè gli archivi sono piccoli), assai più saggio NON usarli a tal fine (le relazioni), e vivere assai felici, oggi e in futuro, qualsiasi "smucinamento" risultasse necessario.

    Il problema si pone, invece, qualora gli archivi siano grandi, ove l'efficienza di un indice piccolo, intero e non scattered ha la sua importanza.

    Per "grande" intendo.. "grande". Non so di preciso nel caso di Access, penso comunque che qualche decina di migliaia di record siano gestiti tranquillamente senza rallentamenti palesi.
Devi accedere o registrarti per scrivere nel forum
8 risposte