Al momento ho un database che utilizza il modello di ereditarietà delle tabelle delle classi. Tre tabelle diverse ereditano da questa tabella. Le tabelle figlio hanno tutte un FK per la tabella padre e i campi sono correttamente indicizzati.
Attualmente stiamo riscontrando alcuni problemi a livello di applicazione perché è difficile capire a quale tabella figlio ci stiamo riferendo dal genitore. Oltre a questo, una query in cui organizziamo per tipo sembra costosa.
Uno sviluppatore sostiene che dovremmo unirci a tutte e 3 le tabelle per capire a quale bambino corrisponde il record padre, e fintanto che le tabelle hanno le query indice appropriate non dovrebbe essere costoso.
D'altra parte, potremmo evitare un sacco di confusione e problemi se aggiungessimo un campo discriminatore nella tabella genitore, in questo modo vorremmo sapere senza dover fare alcun join con il "tipo" di record con cui abbiamo a che fare. Anche il raggruppamento per tipo sarebbe molto più semplice.
- Dovremmo aggiungere un tipo nella tabella genitore?
- Quali sarebbero gli svantaggi?
- È davvero inutile unirsi a più tavoli (purché sono correttamente indicizzati) rispetto ad avere un campo discriminatore?
- Altri pensieri?
Attualmente stiamo utilizzando un'implementazione di record attivo per PHP e non supporta l'ereditarietà delle tabelle di classe.