Folks,orientato agli oggetti, come le strutture di database relazionali
Per il momento n-esima di fila, mi colpisce di nuovo lo stesso vecchio problema. Si tratta di "come mappare le strutture OOP alle tabelle del database in modo indolore".
Ecco uno scenario: nel mio sistema ho diversi tipi di "attori": lavoratori, datori di lavoro, contatti. Hanno alcune funzionalità in comune; altri pezzi sono molto diversi. Le entità con cui tutti gli attori si occupano sono "comunicazioni", "note" (gli amministratori amano lasciare note sui clienti) e altre ancora. Ci sono un sacco di tipi di altre entità di cui ogni tipo di attore si occupa, mentre gli altri no.
Attualmente, il mio schema del database comprende tabelle per:
Attori:
- lavoratori
- datore di lavoro
- contatto
Entità:
- comunicazione
- note
- ecc
tabelle di associazione tra enti e attori:
- lavoratore-comunicazione-Assn
- datore di lavoro-comunicazione-Assn
- lavoratori-notes -assn
- ecc., ottieni il drillo l.
Questo mi sembra un "odore di codice". Ogni volta che un cliente cambia il proprio ruolo (cioè promosso da "contatto" a "datore di lavoro"), è necessario eseguire una serie di script pazzi. Yuck ... D'altra parte, se stavo operando in un mondo puramente orientato all'OOP, sarebbe molto più semplice - avere una classe base per tutte le entità con proprietà comuni, ed essere fatto con esso ...
Nel mondo DB, questa opzione sembra teoricamente possibile, ma suona molto confusa ... Cioè se capisco bene, avrei una nuova tabella base_actor, e ogni altro attore avrebbe un base_actor_id, e quindi le associazioni sarebbero tra base_actor e le entità ... Ma allora, come faccio le query di associazione inversa? Cioè "Mostrami tutte le comunicazioni con solo attori di tipo operaio"?
Qualche consiglio? Qualche idea generale sull'argomento "mappare le strutture OOP al DB relazionale"?
grazie per una risposta esauriente! Penso che mi stia prendendo in giro - molte delle risposte suggeriscono un simile approccio di "partizionamento" delle chiavi primarie usando questo approccio "chiave primaria del bambino = chiave estranea in genitore". Ha molto senso. –
http://martinfowler.com/eaaCatalog/concreteTableInheritance.html – troelskn