Prima lasciatemi dire che sto usando MySQL (non transazionale) e che questo non può essere modificato. Inoltre, ho semplificato le tabelle qui per brevità e chiarezza.Come posso risolvere un'associazione polimorfa a tre vie?
In questo esempio una "lezione" comprende gli attributi interni e gli attributi esterni con i propri attributi "Letture". 'Letture' ha i propri attributi dipendenti dalla chiave e tre attributi esterni distinti (le fonti di lettura).
Voglio evitare l'associazione polimorfica che si arresta qui ma non riesco a girarmi intorno. In questo esempio 'sourceId' nella tabella 'Reading' conterrà l'id da una delle tre tabelle "ExternalURL", "InternalURL" e "Book". Inoltre, il campo "polytable" conterrebbe il nome della tabella da cui proviene l'id "summenzionato".
Qualcuno può prendere un momento per spiegare come risolvere questo RI di mantenimento o è possibile che nell'interesse dell'efficienza debba essere lasciato?
Grazie per il vostro tempo e la considerazione,
Tim
-------------
| ExternalURL |
-------------
| id |
| badlink |
| url |
| |
| |
-------------
|
|
|
/\
------------ ------------- -------------
| Lesson |-------<| Reading |>-------| InternalURL |
------------ ------------- -------------
| id | | id | | id |
| label | | lessonId | | url |
| summary | | sourceId | | |
| lessonOrder| | polytable | | |
| active | | label | | |
------------ ------------- -------------
\/
|
|
------------
| Book |
------------
| id |
| label |
| summary |
| lessonOrder|
| active |
------------
Ciao Bill, prima vorrei ringraziarti per la tua pronta risposta. In secondo luogo, non capisco l'opzione due, ma sembra che il sé impone il RI a differenza del primo, il che penso che avresti bisogno di supportarlo con la logica programmatica per assicurarmi che solo uno non sia nullo. Chiamami denso 'Readable_type' nella tabella 'Readable' contiene 'B' per il libro, 'I' per interno e 'E' per esterno? Perché la chiave primaria di Book non viene incrementata automaticamente? Come aggiungo una nuova lettura di un particolare tipo? So che sei impegnato, ma se potessi fornire ulteriori spiegazioni sul come e sul perché lo apprezzerei molto. Grazie. – mpactMEDIA
Ho aggiunto un collegamento a una risposta passata che ho scritto, in cui approfondisco la soluzione n. 2. –
Grazie mille Bill molto apprezzato. – mpactMEDIA