I diversi tipi di auto sono un'istanza di un problema generale che emerge più e più volte nella modellazione dei dati. Si chiama "generalizzazione / specializzazione" nella modellazione ER e "superclasse / sottoclasse" nella modellazione di oggetti.
Un modellatore di oggetti utilizza le funzionalità di ereditarietà incorporate nel modello a oggetti per risolvere il problema abbastanza facilmente. Le sottoclassi estendono semplicemente la superclasse.
Il modellatore relazionale deve affrontare un problema. come progettare le tabelle in modo da emulare i benefici che si otterrebbero dall'eredità?
La tecnica più semplice si chiama ereditarietà a tabella singola . I dati su tutti i tipi di auto sono raggruppati in un'unica tabella per le auto. C'è una colonna, car_type, che raggruppa tutte le auto di un solo tipo. Nessuna auto può appartenere a più di un tipo. Se una colonna è irrilevante, per esempio, per le auto elettriche, verrà lasciata NULL nelle righe relative alle auto elettriche.
Questa semplice soluzione funziona bene per i casi più piccoli e più semplici. La presenza di molti NULL aggiunge un po 'al sovraccarico di archiviazione e un po' al recupero delle spese generali. Lo sviluppatore potrebbe dover apprendere la logica a tre valori di SQL se i test booleani vengono eseguiti su colonne nullable. All'inizio può essere sconcertante, ma ci si abitua.
Esiste un'altra tecnica, chiamata ereditarietà delle classi . In questo progetto, ci sono tabelle separate per gas_car, electric_car e hybrid_car, oltre a una tabella combinata, car, per tutti loro. Quando desideri tutti i dati su un tipo specifico di auto, ti unisci al tavolo dell'auto con l'apposito tavolo specializzato. Ci sono meno NULL in questo progetto, ma fai di più. Questa tecnica funziona meglio nei casi più grandi e complessi.
Esiste una terza tecnica chiamata chiave primaria condivisa. Questa tecnica viene spesso utilizzata in combinazione con l'ereditarietà della tabella delle classi. Le tabelle specializzate per le sottoclassi hanno, come chiave primaria, una copia della chiave primaria della voce corrispondente nella tabella dell'auto. Questa colonna ID può essere dichiarata come chiave primaria e chiave esterna.
Ciò comporta una piccola programmazione extra quando si devono aggiungere nuove auto, ma rende i giunti semplici, facili e veloci.
Superclass e sottoclassi accadono continuamente nel mondo reale. Non aver paura. Ma prova il tuo progetto iniziale per le prestazioni. Se il tuo primo tentativo è semplice e solido, sarai in grado di modificarlo per accelerarlo.