Esegui una ricerca sul Web con queste due frasi: "Ereditarietà della tabella singola" e "Ereditarietà della tabella delle classi". Troverai molti articoli di persone che hanno già lavorato sullo stesso tipo di problema. Alcuni articoli si basano sul libro di Martin Fowler, Modelli di architettura di applicazioni aziendali . Quello che segue è un breve riassunto di ciò che dicono alcuni articoli.
Auto e Appartamento sono sottoclassi di una classe più generica, che chiamerò RentalItems o semplicemente articoli. se si dovesse costruire un modello a oggetti per questo scenario, si utilizzerà la funzione di ereditarietà delle sottoclassi per svolgere gran parte del lavoro. La tua app può riflettere questo.
Il modello di dati relazionali, come tale, non ha caratteristiche per l'ereditarietà. Alcuni prodotti di database hanno aggiunto funzionalità per supportare l'ereditarietà, ma MySQL non è uno di questi, per quanto ne so. Quindi il problema diventa come progettare un sistema di tabelle che imiterà l'ereditarietà e renderà più semplice per la tua app recuperare i dati di cui ha bisogno.
L'ereditarietà di una tabella riunisce tutti gli articoli noleggiati in un unico grande tavolo, con molte colonne (campi) che riguardano solo le auto o riguardano solo gli appartamenti, ecc. Questo è abbastanza semplice e facile, ma finisce con molto di NULLS nei dati. I NULL possono rendere vagliando i dati un po 'confusi e lenti.
L'ereditarietà della tabella delle classi implica la creazione di una singola tabella generica, chiamiamola oggetto, per tutti gli articoli noleggiati. Questa tabella contiene proprietà comuni a tutti gli articoli in affitto, come la descrizione e il prezzo. Poi ci sono tabelle specializzate per auto, appartamento, ecc. Contenenti dati specializzati che riguardano ciascuna sottoclasse.
Potresti voler fare in modo che tutte le tabelle, oggetti, auto, appartamento, ecc. usino la stessa chiave primaria condivisa. Questa chiave, chiamiamola ItemID, è definita nel solito modo nella tabella degli articoli generica. Nelle altre tabelle, viene dichiarato come chiave primaria e anche come chiave esterna che fa riferimento a ItemID nella tabella degli articoli. Quando si devono aggiungere nuovi elementi, l'app si occupa di inserire le proprietà corrette nelle tabelle corrette e anche di propagare ItemId dalla tabella Item a una o più delle altre tabelle.
Potresti voler aggiungere viste per fornire viste congiunte su Car e Item, Apartment e Item, ecc. Queste viste congiunte verranno eseguite abbastanza velocemente per quantità moderate di dati, a causa degli indici che vengono creati quando si dichiara una chiave primaria.
Questo è solo un contorno. Gli articoli hanno esempi, diagrammi e simili.