Considera questo esempio altamente semplificato di dati relazionali (ogni tabella può essere coinvolta in relazioni uno-a-molti e molti-a-molti non mostrate qui):
people
+-------+------+--------+
| name | born | gender |
+-------+------+--------+
| Alice | 1980 | F |
| Bob | 1975 | M |
| Carl | 1994 | M |
| Dot | 1942 | F |
+-------+------+--------+
workers students
+-------+---------+-------+ +-------+-------------+-------+
| name | company | since | | name | institution | since |
+-------+---------+-------+ +-------+-------------+-------+
| Alice | Soylent | 2003 | | Alice | Western | 2001 |
| Bob | HAL | 1999 | | Carl | Eastern | 2012 |
+-------+---------+-------+ +-------+-------------+-------+
Alcune persone sono lavoratori (Bob), alcuni sono studenti (Carl), altri no (Dot).
Alcuni sono entrambi (Alice).
Mappare a OOP, sarebbe semplice avere tre classi, come:
class Worker extends Person
class Student extends Person
Ma va bene fintanto che la specializzazione è disgiunto : oggetto alice
non può essere istanza di Worker
e Student
al stesso tempo .
Se ottieni un elenco di oggetti Person
, non puoi trasmettere lo stesso elemento a entrambe le sottoclassi.
Innanzitutto, esiste un nome specifico per questo caso di mancata corrispondenza dell'impedenza (probabilmente comune)?
Successivamente, supponi di non poter modificare lo schema . Potrei avere il mio modo di risolvere il problema con OOP, ma sono principalmente interessato al tuo. Esiste una sorta di linea guida per le migliori pratiche ?
Questo esempio ha solo due relazioni ISA, ma la mia impressione è, più sotto-entità non-disgiunte , più OOP diventa scomodo.