In merito a come realizzare le tabelle di un database esistono le forme
normali (il livello più basso è 1, il più alto è 6) che stabiliscono
delle linee guida da seguire. In linea di massima arrivare alla terza
forma normale è lo standard di fatto.

In merito alla vostra discussione riguardo all'organizzazione delle
anagrafiche, vorrei farvi riflettere in termini "object oriented" su
quale sia la forma più efficienti in termini di spazio.

Se definiamo i dati principali di un'anagrafica astratta di sicuro
troviamo l'identificativo (es: cognome, nome, codice fiscale per una
persona fisica oppure ragione sociale, partita iva, codice fiscale per
un'azienda) l'indirizzo (che possiamo suddividere nei campi nazione,
stato/regione, provincia, città, via, numero civico, CAP (*)) e via via
tutti i dati relativi a numeri di telefono, email, fax, ecc. (*) il cap
per le grandi città non è sempre lo stesso, varia in funzione del
distretto/quartiere/circoscrizione.

Ampliando il ragionamento e pensando alle aziende, probabilmente non
solo ci interessano i dati dell'azienda, ma magari di alcuni dipendenti
con cui abbiamo a che fare; in questo caso si può creare una tabella
Contatti (in relazione con l'azienda) contenente un set di dati ridotto
(es. cognome, nome, ufficio ed i soliti contatti tel. email ecc.) che
poi potranno essere gestiti con una relazione master/dettaglio.

Come si può tener conto di un cliente o di un fornitore o di un azienda
che è entrambi o nessuna di queste?
Con dei campi flag (un campo contatore non va bene perché un'azienda può
essere sia cliente che fornitore) che possono essere dei boolean o dei
char o degli int a scelta. In questo modo aggiungere una categoria non
sarà mai traumatico (al massimo richiederà una query ALTER sui record).

Non è nemmeno tanto complesso consentire che l'anagrafica possa gestire
sia persone fisiche sia aziende nella stessa tabella, sempre con l'aiuto
di un campo flag, (tabella principale anagrafica + 2 tabelle secondarie
una per l'identificativo delle persone fisiche e una per
l'identificativo delle aziende); la gestione delle maschere invece è un
pochino più complessa. Personalmente non uso base per queste cose,
preferisco utilizzare il buon C++ Builder e collegarlo ad un db a scelta
dei clienti ed usare degli oggetti che si chiamano frame (una specie di
sub-contenitori a livello form) per gestire i campi delle persone
fisiche e delle aziende e poi dinamicamente attivarli nella form (in
sostanza a turno uno dei 2 è visibile e l'altro invisibile, essendo
sovrapposti viene bene).

In alternativa vi invito a riflettere in termini di "incapsulamento" e
quindi pensare ad una di queste 2 soluzioni:
1. una tabella base da cui "derivare" delle tabelle specializzate (senza
preoccuparsi troppo all'inizio di definire tutto per bene, mal che vada
2 o 3 refactoring sistemano tutto)
2. una tabella per ogni "record elementare" (es. indirizzo) linkate
tramite relazioni alla tabella principale contenente i dati che
diversificano il tipo di dato finale (es. una tabella fornitori che
richiama un record indirizzo ecc.)

Io preferisco la soluzione con una tabella unica per l'anagrafica con i
campi flag, ma anche le ultime 2 non sono male in certe situazioni.

Per progettare il db vi consiglio l'uso di DbDesigner 4 che consente
l'uso di quasi tutti i db visto che può utilizzare i driver odbc e
quindi vi può aiutare sia per il reverse engineering sia per verificare
che il db che avete progettato è allineato con quello realizzato, ed
oltre tutto è molto RAD come applicativo.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Rispondere a