Esiste una base concettuale per la progettazione del database.
Nella progettazione di database classica, ci sono tre modelli: concettuale, logico e fisico.
Il modello concettuale emerge dall'analisi dei requisiti e si evolve man mano che l'argomento sottostante si evolve o quando la comprensione dell'argomento si evolve. Il modello concettuale appunta i dati elementari sulla forma e sulla semantica, ma non affronta questioni come la composizione delle tabelle.
Il modello logico utilizza il modello relazionale dei dati. Può essere derivato dal modello concettuale, ma si occupa anche della composizione delle relazioni. La normalizzazione e altri problemi di composizione entrano in gioco qui. Il modello logico anticipa la progettazione della tabella e anche le query e gli aggiornamenti che l'applicazione produrrà.
Il modello fisico implementa le relazioni come tabelle e aggiunge anche tutte le altre caratteristiche come indici, tablespace, ecc.necessario per costruire effettivamente il database. Deriva dal modello logico, ma tutti i volumi di dati, il carico, le prestazioni e lo spazio su disco entrano in gioco.
Questo suona lungo e noioso, ma in realtà è veloce, se sai come farlo. Il tutto può essere fatto in poche settimane, mentre il resto della squadra sta ancora discutendo le specifiche funzionali. Per un progetto veramente piccolo (6 tavoli, 50 colonne) può essere fatto in pochi giorni, con solo carta e matita. Per i progetti più grandi, esistono strumenti che rendono il design più automatico, meno soggetto a errori e facilmente diagrammato.
Ma cosa succede quando si scopre che il modello concettuale era inaccurato o incompleto e gli altri due modelli e il database stesso devono essere modificati? È qui che il Data Independence viene in soccorso. L'indipendenza dei dati fa per la progettazione del database ciò che l'incapsulamento fa per la progettazione dell'oggetto. Vale a dire, impedisce una piccola modifica in un punto dalla propagazione su tutti gli oggetti dell'applicazione. Gli oggetti dipendono solo dai dati che usano.
Se una nuova tabella deve essere aggiunta a uno schema, le probabilità che qualsiasi applicazione venga interrotta è estremamente piccola. Anche se una tabella esistente deve essere modificata, le query che utilizzano solo le vecchie colonne non vedranno alcuna differenza. Anche quando gli oggetti dipendono dal cambiamento, puoi sempre dare alla tabella modificata un nuovo nome e quindi creare una vista con il vecchio nome che faccia sembrare che la vecchia tabella sia ancora lì.
E l'indipendenza dei dati fisici è quasi completa in un buon DBMS. È possibile riorganizzare i dati, aggiungere e rilasciare indici, ecc. E non si dovrebbe dover modificare alcuna applicazione.
In breve, la gestione delle modifiche può essere eseguita in modo brillante utilizzando i buoni prodotti DBMS disponibili. Sfortunatamente, molti DBA e programmatori non sanno come fare un uso adeguato di queste funzionalità DBMS, anche se esistono da anni.
Cosa succede se lo capovolgi: diciamo che le specifiche del cliente sono attualmente solo per un artista per tourdate, ma in futuro due delle loro band potrebbero andare in tour insieme, quindi suonare negli stessi spettacoli. Aggiungi ancora artist_id alla tabella dei tourdates, limitando il sistema a 1 artista per tourdate? O pensi in anticipo, diventando una relazione HaBtM? – Calvin