2. Dove eravamo
rimasti?
ah si avevo creato la
chiave per la testa,
mi accorgo solo ora
che è però presente
un errore,
nella tabella attività
collegata alla testa
non ho inserito
il codice della ditta,
e fatto in questo
modo funzionerà
ma non rappresenta
quello che voglio
ottenere,
cioè specificare per
ogni azienda
una o più attività con
proprio codice.
Simone Matteoni
Provvedo a correggere,
è possibile correggere,
anche una volta che il
software è in produzione,
ovviamente sarà più
complesso e rischioso,
ed è importante che
quindi il database
venga progettato
correttamente.
Aggiungeremo il codice società
all'interno dell'entità attività,
ovviamente sarà chiave
e sarà relazionato
per dipendenza all'entità
azienda e per referenza
all'entità testa,
sarà presente anche
una chiave in comune,
il codice società ma affronterò
il problema in seguito.
3. Ho due scelte:
1. Conteggiare l'ultimo numero emesso e incrementare una unità.
2. Utilizzare una tabella esterna che conterrà la mia chiave e gestire il contatore con
incremento.
Scelgo la seconda soluzione, molto più flessibile.
Il numeratore BIS nel caso venga usato sarà gestito manualmente dall’operatore.
Un'ultima piccola
osservazione, il numeratore
del documento è un attributo
della tabella, ma come
determino l'incremento?
Simone Matteoni
4. Avrei potuto crearla più semplice, ad esempio con un attributo auto incrementale o
gestire per ogni esercizio un progressivo, ma ritengo questa soluzione con chiave
parlante migliore e resto fermo su questa scelta.
In definitiva,
per fortuna non abbiamo
apportato grosse modifiche
alla nostra chiave.
Simone Matteoni
5. Chiave realizzata,
univocità e durata
garantita.
Mi occuperò ora,
del resto dei campi
necessari.
… … …
Il documento emesso
da un'azienda,
andrà intestato
ad un soggetto,
tipicamente
un cliente o un fornitore.
Simone Matteoni
6. Il dato come da logica
dovrà essere preso da
apposita tabella e sarà un
riferimento alla testa.
Userò una sola tabella per
cliente e fornitore,
inserendo nella
chiave il tipo.
Non mi interessa poter
gestire il progressivo.
Per il conteggio, quindi, in
questo caso il numero
verrà prelevato in fase di
inserimento dall'ultimo
record presente per tipo.
Simone Matteoni
... infine inseriremo il riferimento
sull’entità testa.
7. Simone Matteoni
Questo dato sarà
quindi una chiave
della mia tabella testa,
non primaria ma
esterna, questo tipo di
chiave non è
indicizzato e tornerò
su questo punto, non
permetterà in ogni
caso di inserire valori
non presenti nella
tabella di riferimento.
Chiaramente dalla
tabella referenziata
non potrò eliminare il
dato se presente in
altra tabella, e
nemmeno modificarlo,
ma che senso avrebbe
modificare una
chiave?
Tramite la relazione inserita, potremo in un secondo tempo
estrarre tutti i dati del soggetto collegato, alle volte tuttavia,
capita che i dati collegati non chiave vengano modificati, ad
esempio cambia la ragione sociale o l'indirizzo o il comune, e se
un domani dovessimo rivedere o stampare un documento
emesso non avremmo allineamento temporale.
Per questo motivo taluni dati li riporterò nella testa e li compilerò
in fase di creazione documento.
8. Il soggetto a cui intestiamo il
documento può poi avere più
sedi, e ad esempio potremmo
aver bisogno di spedire della
merce in una di esse, non è
ovviamente accettabile creare
un nuovo soggetto per
specificare questo dato.
Inseriremo quindi un'entità
relazionata.
Come sempre porremo la
referenza all'interno della
nostra tabella testa.
Simone Matteoni
9. Qui abbiamo un caso particolare, l'entità creata per essere relazionata alla tabella dei
soggetti deve avere tale chiave, ma la stessa è già presente nelle teste e quindi come
posso risolvere questo problema?
Possiamo ripetere lo stesso campo nella medesima tabella? No, non è possibile ...
Per ovviare possiamo operare in uno di questi modi:
1. usare campi con nomi diversi
2. usare un'ulteriore tabella con i riferimenti necessari
3. usare una chiave condivisa
Opto per la terza scelta, la chiave del cliente sarà anche quella di referenza all'entità
indirizzi, tanto non potrò inserire un indirizzo non esistente per un soggetto e gli indirizzi
di mio interesse sono quelli dell’intestatario.
Simone Matteoni
10. Infine, come ultima cosa, inserisco il pagamento legato al documento e i dati di
pagamento relativi al cliente.
Creerò apposita entità con le modalità di pagamento.
Quindi imposterò il legame al nostro documento.
Inserirò infine un'entità tramite cui specificherò i dati di pagamento relativi al soggetto
come ad esempio l‘IBAN, la stesse entità la legherò ai documenti per referenza e per
dipendenza al soggetto, con un progressivo interno potrò inserire più record.
Simone Matteoni
11. Bene direi che adesso
siamo a buon punto
per il completamento
della testa.
E adesso …
rilassiamoci …
Simone Matteoni