Progettare i Database 2 - Determinare i campi necessari


 

 

Traduzione dalla Versione inglese "Programmers Guide" a cura di Mirco Lucchini

Seguito del capitolo che tratta i seguenti argomenti:

Determinare i campi necessari

Per determinare i campi in una tabella, decidete che cosa avete bisogno di sapere riguardo alle persone, cose, o eventi registrati nella tabella. Potete pensare ai campi come ad attributi della tabella. Ogni record (o riga) nella tabella contiene lo stesso gruppo di campi o attributi. Per esempio, un campo indirizzo in una tabella clienti contiene gli indirizzi dei clienti. Ogni record nella tabella contiene dati riguardanti un cliente, e il campo indirizzo contiene l'indirizzo per quel cliente.

Identificare i campi

Ecco alcuni consigli per determinare i vostri campi:

Correlate ogni campo direttamente al soggetto della tabella Un campo che descrive il soggetto di una tabella diversa può andare bene anche ad un'altra tabella. Più avanti, quando definirete le relazioni tra le vostre tabelle, vedrete come potrete combinare i dati da campi in tabelle multiple. Per adesso, siate sicuri che ogni campo nella tabella descriva direttamente il soggetto della tabella. Se trovate delle stesse informazioni ripetute in molte tabelle, significa che avete dei campi inutili in alcune delle tabelle.

Non includete dati calcolati o derivati
In molti casi, non si vogliono memorizzare i risultati nelle tabelle. Visual Fox Pro eseguirà per voi i calcoli quando vorrete visualizzare i risultati.

Per esempio, il form degli ordini mostrato in precedenza in questo capitolo, mostra il prezzo esteso per ogni linea dell'ordine del database di Tasmanian Traders, nonostante il campo subtotale per il prezzo esteso non sia presente in alcuna tabella di Tasmanian Traders. Invece, la tabella Order_Line_Items contiene un campo quantità che immagazzina le unità nell'ordine per ogni singolo prodotto, ed anche il prezzo unitario di ogni oggetto ordinato. Usando questi dati Visual Fox Pro calcola i subtotali ogni volta che stampate un ordine, quindi il subtotale non ha bisogno di essere memorizzato nella tabella.

Includete tutte le informazioni di cui avete bisogno E' facile trascurare le informazioni importanti. Tornate alle informazioni che avete raccolto al primo passo del progetto. Controllate i forms e i reports su carta per essere sicuri che tutte le informazioni richieste precedentemente siano incluse nelle tabelle di Visual Fox Pro o che possano essere prelevate da esse. Pensate alle richieste che farete a Visual Fox Pro. Potrà Visual Fox Pro trovare tutte le risposte utilizzando le informazioni nelle vostre tabelle? Avete identificato i campi che conterranno dati unici come l'ID del cliente? Quali tabelle contengono informazioni che unirete in un report o in un form? Per maggiori informazioni riguardanti l'identificazione di campi chiave e tabelle correlate, vedere le sezioni Usare Campi Chiave Primari e Identificare le Relazioni più avanti in questo capitolo.

Memorizzare le informazioni nelle relative più piccole parti logiche Potreste essere tentati di utilizzare un singolo campo per il nome completo, o il nome di un prodotto insieme alla sua descrizione. Combinare più di un tipo di informazione in un singolo campo renderà più difficile recuperare dei risultati più avanti. Provate a spezzare le informazioni in parti logiche; per esempio, create campi separati per il nome ed il cognome, o per il nome del prodotto, la sua categoria e la sua descrizione.

Esempio: Aggiunta di campi alla Tabelle Prodotti

Tasmanian Traders vende specialità gastronomiche importate da tutto il mondo. Gli impiegati utilizzano il report Products On Order per tenere una traccia dei prodotti ordinati.
Report per controllare l'inventario dei prodotti

Il report indica che la tabella prodotti, che contiene dati riguardanti i prodotti venduti, ha bisogno di campi aggiuntivi per il nome del prodotto, le unità immagazzinate, le quantità in ordine. Ma come fare per i campi per il nome del fornitore ed il suo numero di telefono? Per ottenere il report Visual Fox Pro ha bisogno di sapere qual è il fornitore di un determinato prodotto.

Bozza della tabella fornitori contenente i campi per il nome ed il numero di telefono del fornitore

Potete risolvere il problema senza memorizzare dati ridondanti nelle vostre tabelle creando una tabella fornitori con campi separati per il nome ed il numero di telefono. Il prossimo passo vi farà aggiungere un campo alla tabella prodotti che identificherà le informazioni del fornitore.

Utilizzare i Campi Chiave Primari

La potenza in un sistema di gestione con un database relazionale come Visual Fox Pro deriva dalla sua capacità di trovare e raccogliere insieme informazioni memorizzate in tabelle separate. Per fare in modo che Visual Fox Pro possa lavorare al meglio, ogni tabella nel vostro database dovrà includere un campo o una serie di campi che identifichino univocamente ogni singolo record immagazzinato nella tabella. Spesso questo è un unico numero di identificazione, come un numero ID per ogni impiegato o un numero di serie. Nella terminologia dei database questa informazione è chiamata chiave primaria della tabella. Visual Fox Pro usa i campi chiave primari per associare velocemente dei dati da tabelle multiple e riportare insieme i dati per voi.

Se già avete un identificativo unico per una tabella, come un gruppo di numeri del prodotto che avete generato per identificare gli oggetti nel vostro magazzino, lo potete utilizzare come chiave primaria della tabella. Ma siate sicuri che i valori in questo campo siano sempre diversi per ogni record -Visual Fox Pro non permette valori duplicati in un campo chiave primario. Per esempio, non utilizzate il nome di qualcuno come chiave primaria, perché i nomi non sono unici. Potete facilmente avere due persone con lo stesso nome nella stessa tabella.

Quando scegliete i campi chiave primari, tenete presente questi punti:

Esempio: Impostazione della chiave primaria per la tabella dei prodotti

La chiave primaria della tabella prodotti di Tasmanian Traders contiene il numero ID del prodotto. Siccome ogni numero del prodotto identifica un diverso prodotto, voi non vorrete due prodotti con lo stesso numero.

La chiave primaria per la tabella prodotti è il campo Product_id.

 

In alcuni casi potreste volere utilizzare due o più campi che insieme formino la chiave primaria di una tabella. Per esempio, la tabella Order_line_items nel database Tasmanian Traders usa due campi come sua chiave primaria: Order_id e Product_id. Più avanti vedrete perché.

Identificare le relazioni

Ora che avete suddiviso le informazioni in tabelle, avete bisogno un sistema per fare si che Visual Fox Pro le riunisca in modo comprensibile. Per esempio, il form seguente include informazioni provenienti da diverse tabelle.

Il Form Order Entry utilizza informazioni provenienti da diverse tabelle.

Visual Fox Pro è un database relazionale, questo significa che i dati correlati saranno immagazzinati in tabelle diverse; poi definirete le relazioni tra le tabelle e Visual Fox Pro utilizzerà le relazioni per trovare le informazioni associate contenute nel vostro database.

Per esempio, supponiate di voler telefonare ad un impiegato per avere informazioni riguardanti le sue vendite. Il numero di telefono dell'impiegato è registrato nella tabella impiegati e le vendite sono registrate nella tabella Ordini. Quando chiedete a Visual Fox Pro la vendita che vi interessa, Visual Fox Pro può consultare il numero di telefono basato sulla relazione tra le tabelle. Esso funziona perché Employee_id, la chiave primaria della tabella impiegati, è anche un campo nella tabella ordini. Nella terminologia dei database, il campo Employee_id nella tabella ordini è chiamato chiave esterna (foreign key), perché si riferisce ad una chiave primaria di una tabella diversa o esterna.

Il campo Employee_id come chiave primaria per la tabella Impiegati e come chiave esterna per la tabella Ordini

Così per impostare una relazione tra due tabelle - Tabella A e Tabella B - verrà aggiunta una chiave primaria all'altra tabella cosicché essa appaia in entrambe le tabelle. Ma quale sarà la chiave primaria della tabella da utilizzare?. Per impostare la relazione correttamente, dovrete determinare la natura della relazione. Esistono tre tipi di relazioni tra tabelle.

· Relazione uno-a-molti
· Relazione molti-a-molti
· Relazione uno-a-uno

La parte rimanente di questa sezione mostra un esempio di ogni tipo di relazione e spiega come progettare le vostre tabelle in modo che Visual Fox Pro possa associare i dati correttamente. Lo scopo di ogni esempio è quello di spiegare come possiate determinare le relazioni tra le tabelle e come decidere quali campi appartenenti alle tabelle possano essere idonei per queste relazioni - esso non descrive come usare l'interfaccia di Visual Fox Pro per relazionare le tabelle.

Esempio: creare una relazione Uno-a-molti

Una relazione uno-a-molti, è il tipo di relazione più comune in un database relazionale. . In una relazione uno-a-molti, un record nella Tabella A può avere più di un record correlato nella Tabella B, ma un record nella Tabella B può avere al massimo un solo record correlato nella Tabella A.

Per esempio, le tabelle Categorie e Prodotti nel database Tasmanian Traders hanno una relazione di tipo uno-a-molti.

Le tabelle Categorie e Prodotti rappresentano una relazione uno-a-molti.



Per impostare la relazione, aggiungete il campo o i campi, che rappresenteranno la chiave primaria, dalla parte "uno" della relazione alla tabella dalla parte "molti" della relazione. Utilizzerete una chiave primaria o a indice candidato per la parte "uno" della relazione e una chiave ad indice regolare per la parte "molti". In questo caso dovrete aggiungere il campo Category_id dalla tabella Categorie alla tabella Prodotti, perché una categoria contiene molti prodotti. Visual Fox Pro utilizza il numero identificativo della categoria per trovare la corretta categoria per ogni prodotto.



Esempio: Creare una relazione Molti-a-Molti

Nella relazione molti-a-molti, un record nella Tabella A può avere più di un record corrispondente nella Tabella B. e un record nella Tabella B può avere più di un record corrispondente nella Tabella A. Questo tipo di relazione richiede delle modifiche al vostro database prima che possiate specificare correttamente la relazione a Visual Fox Pro.
Per riconoscere le relazioni molti-a-molti tra le vostre tabelle, è importante dare uno sguardo ad entrambe le direzioni della relazione. Per esempio, considerate la relazione tra ordini e prodotti dell'azienda Tasmanian Traders. Un ordine può contenere più di un prodotto. Così per ogni record nella tabella degli ordini, potrebbero esserci più record nella tabella prodotti; ma non è tutto, ogni prodotto potrebbe apparire in molti ordini; così per ogni record della tabella prodotti, potrebbero esserci molti record nella tabella ordini.

Le tabelle Ordini e Prodotti rappresentano una relazione molti-a-molti.

Esempio: Creare una relazione Uno-a-Uno


In una relazione uno-a-uno, un record della Tabella A non può avere più di un record corrispondente nella Tabella B, ed un record della Tabella B non può avere più di un record corrispondente nella Tabella A. Questo tipo di relazione è insolito e potrebbe essere richiamata per alcuni cambiamenti nella progettazione del vostro database.

La relazione uno-a-uno tra tabelle è insolita perché in molti casi, l'informazione nelle due tabelle potrebbe semplicemente essere combinata in una tabella. Per esempio, supponete di creare una tabella chiamata Giocatori di Ping-Pong per controllare le informazioni riguardanti il torneo di Ping-Pong di Tasmanian Traders. Siccome i giocatori di ping-pong sono tutti impiegati di Tasmanian Traders, questa tabella ha una relazione uno-a-uno con la tabella Impiegati del database Tasmanian Traders.
Le tabelle Impiegati e Giocatori di Ping-Pong rappresentano una relazione uno-a-uno.


Potreste aggiungere tutti i campi della tabelle Giocatori di Ping-Pong alla tabella Impiegati. Ma la tabella Giocatori di Ping-Pong controlla un evento momentaneo e non si desiderano altre informazioni una volta che l'evento si è verificato. In aggiunta, non tutti gli impiegati giocano a ping-pong, così se questi campi fossero inclusi nella tabella Impiegati, potrebbero non contenere niente per diversi record. Per questi motivi ha senso creare una tabella separata.

Quando identificate la necessità di una relazione uno-a-uno nel vostro database, considerate di poter mettere insieme le informazioni in una sola tabella. Per esempio, nella tabella impiegati, un impiegato può avere un direttore che è anche un impiegato. Potete aggiungere un campo numero identificativo del direttore. Per ottenere le informazioni più avanti potrete creare un auto collegamento nelle vostre query o nelle viste. Non avete bisogno di tabelle separate per risolvere una relazione uno-a-uno. Se per qualche motivo non volete farlo, ecco come impostare una relazione uno-a-uno tra due tabelle:
· se le due tabelle anno il medesimo soggetto, potrete probabilmente impostare la relazione usando lo stesso campo chiave primaria in entrambe le tabelle.
· Se le due tabelle hanno soggetti diversi con chiavi primarie diverse, prendete una delle tabelle( o l'altra) e mettete il suo campo chiave primaria nell'altra tabella come chiave esterna.


(segue)

Traduzione dalla Versione inglese "Programmers Guide" a cura di Mirco Lucchini

© FoxPro e Visual FoxPro sono un marchi registrati da Microsoft Corporation

 

 

Febbraio 2002
 

FoxPro e Visual FoxPro® sono un marchi registrati da Microsoft Corporation

Fonte: "Programmers Guide Visual FoxPro®" di Microsoft© in lingua inglese.
Questa guida ha il solo scopo di fornire le indicazioni
per muovere i primi passi con questo bellissimo strumento.

 


dal 22 Giugno 1999
webmaster@foxitaly.com