Creazione oggetto campo foreign key
copia linkTrascrizione
Procediamo con la creazione della tabella Appartamenti, albero di progetto sul nome del database, tasto destro Aggiungi Tabella, assegniamo come nome Appartamenti e come Nome Elemento Appartamento; confermiamo con Salva.
Aggiungiamo ora la chiave primaria di tipo doc-id, puntatore sul nome della tabella Appartamenti, tasto destro Aggiungi Campo. Qui assegniamo come nome Id, e anche come descrizione e titolo, come esempi di contenuto una sequenza di 20 caratteri, Tipo dati Char lunghezza fissa con una lunghezza a 20. Questa è la chiave primaria non dimentichiamo di attivare il check relativo; confermiamo il tutto con Salva.
Mettete il video in pausa e aggiungete da soli gli altri campi sino al campo Indirizzo incluso quindi lascio a voi i campi: Nome, Descrizione, Descrizione HTML ed Indirizzo; quando avrete terminato fate ripartire il video perché insieme aggiungeremo il campo Id Località.
Il campo Id Località è un campo speciale, in gergo database è un campo Chiave Esterna o Foreign Key; i valori contenuti nel campo IdLocalita devono essere valori presenti nella tabella Localita nel campo Id; si crea dunque una relazione di tipo 1 a Molti tra la tabella Localita e la tabella Appartamenti.
Di base non sarà possibile inserire record nella tabella Appartamenti con un valore ‘sconosciuto’ nella colonna IdLocalita.
La creazione del campo all’interno della struttura del progetto avviene con una operazione di drag & drop tra le 2 tabelle coinvolte; precisamente trascineremo la tabella Localita sulla tabella Appartamenti (in linea generale si trascina sempre la tabella principale sulla tabella dove si desidera creare il campo Foreign key).
Il trascinamento di elementi nell’albero di progetto, solo con il mouse non effettua nessuna creazione di oggetti, ma serve a spostare gli oggetti nell’albero; ora però noi vogliamo creare un nuovo campo ed una relazione quindi nell’operazione useremo mouse e tastiera insieme, precisamente effettueremo l’operazione di drag & drop con il tasto SHIFT premuto.
Procediamo -> trasciniamo la tabella Localita sulla tabella Appartamenti e intanto premiamo e teniamo premuto sulla tastiera il tasto SHIFT -> lasciamo il mouse e quindi la tastiera.
Se l’operazione è avvenuta correttamente, potrete notare, nell’albero di progetto, 2 nuovi elementi sotto la tabella Appartamenti: il campo IdComune e un secondo oggetto che rappresenta la relazione tra le tabelle.
Controllando le proprietà del campo IdComune possiamo notare alcune opzioni disattivate: il tipo di campo, la lunghezza; sono proprietà ereditate automaticamente dalla chiave primaria della tabella Localita (essendo Char Fixed di 20 ha creato la foreign key come Char Fixed di 20); impostiamo la parola Località per questo campo sia come titolo che come descrizione. Confermo queste modifiche con Salva.
Guardando un albero di progetto come possiamo capire la relazione impostata tra 2 tabelle ? Sicuramente controllando la presenza dell’oggetto relazione e se volessimo entrare nel dettaglio per sapere esattamente tabelle e campi in relazione possiamo utilizzare il tasto destro del mouse e scegliere Modifica Foreign Key.
La finestra modale descrive le due tabelle e i due campi che entrano in gioco nella relazione; in teoria è consentito anche modificare la relazione includendo campi differenti.
Domanda 1) Se volessimo non inserire un IdComune e renderlo opzionale?
Domanda 2) Cosa succede nel caso di cancellazione di una Località?
La prima domanda sembrerebbe semplice, in quanto basterebbe impostazione Opzionale il campo ma come vedete la proprietà Opzionale è disattivata. Quando un campo è in Foreign Key la voce Opzionale si imposta nell’oggetto Foreign Key.
Doppio clic sull’oggetto Foreign Key e qui troviamo il flag Opzionale; non lo imposto ora, perché non è il nostro caso ma ricordiamo che l’opzionalità è sulla Foreign Key.
Per la seconda domanda relativa alla cancellazione della Località ci sono due situazioni differenti a seconda se il record che stiamo eliminando è presente come Id nella tabella Appartamenti oppure non fosse presente.
Se non fosse presente nella tabella Appartamenti, verrebbe eliminato senza problemi, ma nel caso in cui fosse presente nella tabella, l’operazione di cancellazione verrebbe bloccata dal database. Questo comportamento rientra nelle regole di integrità referenziale dei database SQL: i dati contenuti devono sempre essere congrui. Quindi se un record è presente come riferimento in altre tabelle non si può mai eliminare ? No basta modificare la regola di cancellazione dell’integrità referenziale.
OPZIONE 1 -> IMPEDISCI MODIFICHE La cancellazione viene impedita in presenza di record correlati.
OPZIONE 2 -> PROPAGA MODIFICHE Oltre al record della tabella vengono eliminati tutti i record correlati.
Nel nostro caso verrebbe eliminato il record Localita e tutti i record Appartamento che contengono il riferimento alla Località.
Dove troviamo questa impostazione di integrità referenziale, esattamente sull’oggetto di Relazione con il doppio clic. Entrando nelle proprietà alla voce Regole di cancellazione, possiamo impostare Impedisci Modifiche o Propaga Modifiche. Le altre voci non le considero perché i database scelti non le prevedono e quindi non sarebbero impostabili.
Nel nostro caso lasciamo Impedisci Modifiche e salviamo.
Le nozioni fino a questo tutorial consentono la creazione di tutta la struttura del database per il progetto; per intanto vi lascio come esercizio il completamento di questa tabella; aggiungerete dunque il campo Latitudine, Longitudine e Ospiti Max; nel progetto finale che potete scaricare, questi 3 campi saranno già inclusi.
Aggiungiamo ora la chiave primaria di tipo doc-id, puntatore sul nome della tabella Appartamenti, tasto destro Aggiungi Campo. Qui assegniamo come nome Id, e anche come descrizione e titolo, come esempi di contenuto una sequenza di 20 caratteri, Tipo dati Char lunghezza fissa con una lunghezza a 20. Questa è la chiave primaria non dimentichiamo di attivare il check relativo; confermiamo il tutto con Salva.
Mettete il video in pausa e aggiungete da soli gli altri campi sino al campo Indirizzo incluso quindi lascio a voi i campi: Nome, Descrizione, Descrizione HTML ed Indirizzo; quando avrete terminato fate ripartire il video perché insieme aggiungeremo il campo Id Località.
Il campo Id Località è un campo speciale, in gergo database è un campo Chiave Esterna o Foreign Key; i valori contenuti nel campo IdLocalita devono essere valori presenti nella tabella Localita nel campo Id; si crea dunque una relazione di tipo 1 a Molti tra la tabella Localita e la tabella Appartamenti.
Di base non sarà possibile inserire record nella tabella Appartamenti con un valore ‘sconosciuto’ nella colonna IdLocalita.
La creazione del campo all’interno della struttura del progetto avviene con una operazione di drag & drop tra le 2 tabelle coinvolte; precisamente trascineremo la tabella Localita sulla tabella Appartamenti (in linea generale si trascina sempre la tabella principale sulla tabella dove si desidera creare il campo Foreign key).
Il trascinamento di elementi nell’albero di progetto, solo con il mouse non effettua nessuna creazione di oggetti, ma serve a spostare gli oggetti nell’albero; ora però noi vogliamo creare un nuovo campo ed una relazione quindi nell’operazione useremo mouse e tastiera insieme, precisamente effettueremo l’operazione di drag & drop con il tasto SHIFT premuto.
Procediamo -> trasciniamo la tabella Localita sulla tabella Appartamenti e intanto premiamo e teniamo premuto sulla tastiera il tasto SHIFT -> lasciamo il mouse e quindi la tastiera.
Se l’operazione è avvenuta correttamente, potrete notare, nell’albero di progetto, 2 nuovi elementi sotto la tabella Appartamenti: il campo IdComune e un secondo oggetto che rappresenta la relazione tra le tabelle.
Controllando le proprietà del campo IdComune possiamo notare alcune opzioni disattivate: il tipo di campo, la lunghezza; sono proprietà ereditate automaticamente dalla chiave primaria della tabella Localita (essendo Char Fixed di 20 ha creato la foreign key come Char Fixed di 20); impostiamo la parola Località per questo campo sia come titolo che come descrizione. Confermo queste modifiche con Salva.
Guardando un albero di progetto come possiamo capire la relazione impostata tra 2 tabelle ? Sicuramente controllando la presenza dell’oggetto relazione e se volessimo entrare nel dettaglio per sapere esattamente tabelle e campi in relazione possiamo utilizzare il tasto destro del mouse e scegliere Modifica Foreign Key.
La finestra modale descrive le due tabelle e i due campi che entrano in gioco nella relazione; in teoria è consentito anche modificare la relazione includendo campi differenti.
Domanda 1) Se volessimo non inserire un IdComune e renderlo opzionale?
Domanda 2) Cosa succede nel caso di cancellazione di una Località?
La prima domanda sembrerebbe semplice, in quanto basterebbe impostazione Opzionale il campo ma come vedete la proprietà Opzionale è disattivata. Quando un campo è in Foreign Key la voce Opzionale si imposta nell’oggetto Foreign Key.
Doppio clic sull’oggetto Foreign Key e qui troviamo il flag Opzionale; non lo imposto ora, perché non è il nostro caso ma ricordiamo che l’opzionalità è sulla Foreign Key.
Per la seconda domanda relativa alla cancellazione della Località ci sono due situazioni differenti a seconda se il record che stiamo eliminando è presente come Id nella tabella Appartamenti oppure non fosse presente.
Se non fosse presente nella tabella Appartamenti, verrebbe eliminato senza problemi, ma nel caso in cui fosse presente nella tabella, l’operazione di cancellazione verrebbe bloccata dal database. Questo comportamento rientra nelle regole di integrità referenziale dei database SQL: i dati contenuti devono sempre essere congrui. Quindi se un record è presente come riferimento in altre tabelle non si può mai eliminare ? No basta modificare la regola di cancellazione dell’integrità referenziale.
OPZIONE 1 -> IMPEDISCI MODIFICHE La cancellazione viene impedita in presenza di record correlati.
OPZIONE 2 -> PROPAGA MODIFICHE Oltre al record della tabella vengono eliminati tutti i record correlati.
Nel nostro caso verrebbe eliminato il record Localita e tutti i record Appartamento che contengono il riferimento alla Località.
Dove troviamo questa impostazione di integrità referenziale, esattamente sull’oggetto di Relazione con il doppio clic. Entrando nelle proprietà alla voce Regole di cancellazione, possiamo impostare Impedisci Modifiche o Propaga Modifiche. Le altre voci non le considero perché i database scelti non le prevedono e quindi non sarebbero impostabili.
Nel nostro caso lasciamo Impedisci Modifiche e salviamo.
Le nozioni fino a questo tutorial consentono la creazione di tutta la struttura del database per il progetto; per intanto vi lascio come esercizio il completamento di questa tabella; aggiungerete dunque il campo Latitudine, Longitudine e Ospiti Max; nel progetto finale che potete scaricare, questi 3 campi saranno già inclusi.
Ultima modifica: 19/03/2021 / Validità: da 20.0.7800