Progettare i Database 3 - Identificare le relazioni


 

 

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

Seguito del capitolo che tratta i seguenti argomenti:

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