Il 28/07/2016 09:49, Andrea (Work) ha scritto:
> Buongiorno a tutti,
> negli anni spesso ho usato campi auto increment sulle tabelle, ma mi sto
> rendendo conto che nell'ottica di trasferimento file da sorgenti diversi
> (es. una presa ordini da parte di un agente), e sincronizzazioni varie sono
> abbastanza complesse da gestire.
>
> Nell'esempio dell'ordine la mia chiave anzichè l'increment potrebbe essere
> Anno+Numero.
> Il problema di questo approccio è che su un paio di livelli testa/righe i
> campi chiave diventano sempre di più, es. le righe dell'ordine diventerebbe
> Anno+Numero+NumRiga, e di conseguenza le join ingestibile.
>
> Pensavo quindi ad un approccio un po' diverso. Nella testata ho i miei
> campi Anno e Numero, ma creo un campo Cod (char) che compongo 16000001
> (2016/1). A questo punto le righe fanno riferimento ad un solo campo, e qui
> la chiave potrebbe diventare 160000010001 (2016/1 riga 1).
> Lo svantaggio è che bisogna dimensionare il campo char con sicurezza, e che
> la grandezza del campo chiave è maggiore.
>
> Quali sono le vostre espereizne o consigli?
> Grazie
>
Sono anni che progetto db relazionali.
Il consiglio,che è poi quello faccio io,è di usare le sequence (o
autoincrement a dir si voglia) solo per le relazioni
Per questo il numero inserito nella sequence non ha significati
particolari (al massimo come sequenza temporale ma non e' detto che sia
contigua)
La sequence nella tabella che dovrebbe avere la pk deve diventare una pk
a sua volta (altrimenti le relazioni non si possono fare) e quella che
dovrebbe essere la chiave primaria diventa una semplice chiave univoca
con eventuale null sulle colonne (non si possono avere piu pk per tabella).