Ogni volta che usi un’app, un sito di e-commerce o un social network, interagisci con un database. Ma come nascono? Non si creano a caso! Un database ben costruito è il risultato di un’attenta progettazione. Questo processo, che porta dalla rappresentazione astratta della realtà alla sua implementazione concreta in un sistema informatico, è fondamentale per garantire l'efficienza, l'integrità e la gestibilità delle informazioni. La transizione dal modello concettuale al modello logico relazionale rappresenta una tappa cruciale in questo percorso, permettendo di definire la struttura dei dati in un formato comprensibile e gestibile dai sistemi di gestione di database (DBMS).
La Progettazione Concettuale: Rappresentare la Realtà
La prima fase nella creazione di un database è la progettazione concettuale. In questa fase, l'obiettivo è quello di modellare la realtà di interesse in modo chiaro e comprensibile, senza ancora preoccuparsi delle specifiche tecniche di implementazione. Il modello concettuale più diffuso e studiato è lo schema E/R (Entity Relationship), che utilizza una notazione grafica per rappresentare gli elementi fondamentali del dominio da modellare.

Gli elementi chiave di questo modello sono:
- Entità (rettangolo): Rappresenta una classe di oggetti con proprietà comuni. Ad esempio, in un database di una biblioteca, "Libro" e "Utente" sarebbero entità. Ogni entità racchiude un insieme di oggetti simili che vogliamo memorizzare.
- Attributi (ellisse): Sono le proprietà che descrivono un’entità. Per l'entità "Libro", gli attributi potrebbero essere "Titolo", "Autore", "ISBN", "Anno di pubblicazione". Per l'entità "Utente", potrebbero essere "Nome", "Cognome", "Indirizzo", "Codice Fiscale". Un attributo speciale, detto chiave primaria (sottolineato), è fondamentale perché identifica in modo unico ogni oggetto (o istanza) di quell’entità. Ad esempio, l'ISBN potrebbe essere la chiave primaria per l'entità "Libro", e il Codice Fiscale per l'entità "Utente".
- Relazioni (rombo): Descrivono un legame logico tra due o più entità. Ad esempio, un "Utente" può "Prestare" un "Libro". Sulle relazioni indichiamo anche la cardinalità, che ci dice "quanti oggetti partecipano". Le più comuni sono:
- 1:1 (uno a uno): Un’istanza di un’entità è collegata a una sola istanza di un’altra entità, e viceversa. (Es: Un dipendente ha un solo ufficio assegnato, e un ufficio è assegnato a un solo dipendente).
- 1:N (uno a molti): Un’istanza di un’entità è collegata a molte istanze di un’altra entità, ma un’istanza della seconda entità è collegata a una sola istanza della prima. (Es: Un autore scrive molti libri, ma ogni libro è scritto da un solo autore).
- N:M (molti a molti): Molte istanze di un’entità sono collegate a molte istanze di un’altra entità. (Es: Molti studenti frequentano molti corsi, e molti corsi sono frequentati da molti studenti).
La progettazione concettuale fornisce una visione d'insieme della struttura dei dati, facilitando la comunicazione tra gli stakeholder e garantendo che tutti abbiano una comprensione condivisa del dominio.
La Trasformazione nel Modello Logico Relazionale
Una volta definito il modello concettuale, è necessario tradurlo in un formato che il computer possa comprendere e gestire. È qui che entra in gioco la progettazione logica, in particolare la conversione verso il modello logico relazionale. Il modello relazionale è probabilmente il modello logico più diffuso nelle basi di dati, sicuramente il più studiato. Questo modello si basa sulla teoria matematica delle relazioni e organizza i dati in tabelle.

Nel modello relazionale:
- Ogni entità diventa una tabella: Le tabelle sono la struttura fondamentale per l'archiviazione dei dati. Ogni entità del modello concettuale viene mappata in una tabella nel modello logico.
- Gli attributi diventano colonne (campi): Le proprietà che descrivono un'entità nel modello concettuale diventano le colonne della tabella corrispondente. Per ogni colonna viene definito un tipo di dato (es. testo, numero, data).
- Le istanze delle entità diventano righe (tuple o record): Ogni record all'interno di una tabella rappresenta una singola istanza dell'entità. I valori assunti da una riga della tabella vengono denominati tuple o record.
Il processo di traduzione dal modello concettuale E/R al modello logico relazionale segue regole precise, che garantiscono la coerenza e l'integrità dei dati. Nella progettazione di una base di dati relazionale il modello concettuale di riferimento è lo schema E/R (Entity Relationship), da cui otteniamo il modello logico relazionale.
Gestire le Relazioni: Chiavi Primarie ed Esterne
La vera potenza del modello relazionale risiede nella sua capacità di gestire le relazioni tra le diverse entità. Questo avviene attraverso l'uso di chiavi.
Chiave Primaria (Primary Key): È un attributo o un insieme di attributi che identifica univocamente ogni riga all'interno di una tabella. Si definisce chiave primaria un sottoinsieme (non ridondante) di attributi per cui ogni valore identifica univocamente ogni tupla della relazione. La chiave primaria garantisce che non ci siano duplicati e che ogni record sia distinguibile dagli altri. Come accennato nella fase concettuale, viene sottolineata nel diagramma E/R e diventa la chiave primaria della tabella corrispondente.
Relazioni 1:N (Uno a Molti): Nella teoria dei database relazionali è particolarmente importante il processo che permette di ottenere il modello logico a partire dal modello concettuale. Nella traduzione dal modello concettuale allo schema logico, vengono prima tradotte le entità. In particolare, per ogni entità si crea una tabella utilizzando per i campi gli attributi semplici dell’entità. Le relazioni 1:N si traducono aggiungendo una chiave esterna (Foreign Key). Se l’associazione è 1 a N, nel lato N si aggiunge una colonna, corrispondente alla chiave primaria del lato 1. Ad esempio, se abbiamo un'entità "Autore" (con chiave primaria "IDAutore") e un'entità "Libro" (con chiave primaria "ISBN"), e la relazione è 1:N (un autore scrive molti libri), nella tabella "Libro" aggiungeremo una colonna "IDAutore" che conterrà il codice dell'autore che ha scritto quel libro. Questa colonna è la chiave esterna.
Chiave Esterna (Foreign Key): Una chiave esterna è un attributo (o un insieme di attributi) in una tabella che fa riferimento alla chiave primaria di un'altra tabella. La sua funzione è quella di stabilire e mantenere un legame tra le due tabelle, imponendo che ci sia una corrispondenza tra gli attributi comuni alle due tabelle. In pratica, la chiave esterna garantisce l'integrità referenziale: un valore inserito nella colonna della chiave esterna deve esistere nella colonna della chiave primaria della tabella di riferimento.
Tradurre le Associazioni: Strategie di Modellazione
Nella traduzione dal modello concettuale allo schema logico, dopo aver tradotto le entità, è il turno delle associazioni (o relazioni). Per le associazioni vi sono due strategie principali, da utilizzare in base al tipo di associazione:
- Inglobare l'associazione nelle tabelle esistenti: Questa strategia è tipicamente utilizzata per le associazioni 1:1. La chiave primaria di una tabella viene aggiunta come chiave esterna all'altra tabella.
- Creare nuove tabelle: Questa strategia è fondamentale per gestire le associazioni N:M (molti a molti). Un'associazione N:M tra due entità A e B non può essere rappresentata direttamente aggiungendo chiavi esterne in una delle due tabelle (perché un record in A potrebbe essere collegato a molti record in B, e viceversa). Per risolvere questo problema, si crea una nuova tabella (chiamata anche tabella di collegamento o tabella associativa). Questa nuova tabella avrà come chiavi primarie le chiavi primarie delle due entità originali (A e B). In questo modo, ogni riga della nuova tabella rappresenta un collegamento specifico tra un'istanza di A e un'istanza di B. Ad esempio, per modellare la relazione N:M tra "Studente" e "Corso", creeremo una tabella "Iscrizione" che conterrà la chiave primaria di "Studente" e la chiave primaria di "Corso" come proprie chiavi primarie e chiavi esterne.

Vincoli nel Modello Relazionale
Nel modello relazionale assumono importanza fondamentale i vincoli, che sono regole che governano i dati e ne garantiscono l'integrità. Oltre alle chiavi primarie e alle chiavi esterne, esistono altri tipi di vincoli:
- Vincoli di dominio: Definiscono il tipo di dati consentito per un attributo (es. un numero intero, una stringa di massimo 50 caratteri, una data valida).
- Vincoli di unicità: Garantiscono che i valori di un attributo o di un gruppo di attributi siano unici all'interno della tabella (simili alla chiave primaria, ma non necessariamente la chiave primaria stessa).
- Vincoli di integrità referenziale: Come già discusso, garantiscono che le relazioni tra tabelle siano valide, impedendo operazioni che potrebbero rompere i collegamenti tra i dati.
- Vincoli definiti dall'utente: Regole specifiche definite per il dominio applicativo, che vanno oltre i meccanismi standard del modello relazionale.
Le Sette Regole di Conversione
Considerando che per colonne si intendono gli attributi (i campi della tabella) e che per righe si intendono le tuple o record, si possono elencare 7 diverse regole di conversione che permettono di passare dal modello concettuale al modello logico in una base di dati relazionale. Queste regole coprono le varie tipologie di entità e relazioni:
- Entità con Attributi Semplici: Ogni entità con attributi semplici si traduce in una tabella. Gli attributi diventano colonne, e la chiave primaria dell'entità diventa la chiave primaria della tabella.
- Associazione 1:1: La chiave primaria di una delle due entità viene aggiunta come chiave esterna all'altra tabella. La scelta di quale tabella riceve la chiave esterna dipende da considerazioni di cardinalità opzionale e performance.
- Associazione 1:N: La chiave primaria dell'entità sul lato "1" viene aggiunta come chiave esterna all'entità sul lato "N". Questa è la regola fondamentale per gestire relazioni uno-a-molti.
- Associazione N:M: Viene creata una nuova tabella che contiene come chiavi primarie le chiavi primarie delle due entità coinvolte. Questa nuova tabella agisce da ponte tra le due entità.
- Entità Deboli: Un'entità debole (che non possiede una chiave primaria propria e dipende da un'entità forte) viene modellata creando una tabella che include la chiave primaria dell'entità forte come parte della propria chiave primaria e come chiave esterna.
- Generalizzazioni/Specializzazioni (Ereditarietà): Modelli più complessi che coinvolgono ereditarietà (es. un "Veicolo" che può essere una "Auto" o una "Moto") possono essere tradotti in vari modi: una tabella per ogni entità (con possibili ridondanze), una tabella unica con colonne per tutti gli attributi e valori NULL dove non applicabile, o una tabella per la superclasse e tabelle separate per le sottoclassi.
- Aggregazioni: Rappresentazioni di relazioni tra relazioni possono essere modellate creando tabelle che includono le chiavi primarie delle relazioni coinvolte.
MySQL: Come creare un database semplice con XAMPP e phpMyAdmin
La padronanza di queste regole e la comprensione dei principi sottostanti sono essenziali per chiunque voglia progettare e implementare database efficienti e robusti. Il passaggio dal modello concettuale al modello logico relazionale non è solo un esercizio teorico, ma un passo pratico e indispensabile nella costruzione di qualsiasi sistema informativo moderno. La chiarezza nella definizione delle entità, degli attributi e delle relazioni, unita a una rigorosa applicazione delle regole di conversione, pone le basi per un database che sia non solo funzionale, ma anche facile da interrogare, mantenere e scalare nel tempo.
tags: #dal #passaggio #dal #modello #concettuale #al
