Po pierwsze pozwól mi powiedzieć, że używam MySQL (nie transakcyjnego) i że nie można tego zmienić. Uprościliśmy tu także tabele dla zwięzłości i przejrzystości.Jak mogę rozwiązać trójdrożne stowarzyszenie polimorficzne?
W tym przykładzie "Lekcja" składa się z wewnętrznych atrybutów i zewnętrznych atrybutów z własnymi atrybutami "Odczyty". "Odczyty" mają własne kluczowe atrybuty zależne i trzy odrębne cechy zewnętrzne (źródła czytania).
Chcę uniknąć polimorficznego skojarzenia, które tu przybywa, ale nie jestem w stanie owinąć się wokół niego. W tym przykładzie "sourceId" w tabeli "Reading" zawierałby identyfikator z jednej z trzech tabel "ExternalURL", "InternalURL" i "Book". Również pole "polytable" będzie zawierało nazwę tabeli, z której pochodzi wspomniany wcześniej "id".
Czy ktoś może poświęcić chwilę, aby wyjaśnić, w jaki sposób rozwiązać ten problem z zachowaniem wskaźnika RI, czy też jest możliwe, że w interesie efektywności powinno ono zostać?
Dziękuję za poświęcony czas i uwagę,
Tima
-------------
| 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 |
------------
Witam Bill, najpierw pozwól mi podziękować za szybką odpowiedź. Po drugie, nie rozumiem opcji drugiej, ale wygląda na to, że samo wymusza RI w przeciwieństwie do pierwszego, co, jak sądzę, musicie wesprzeć logiką programową, aby upewnić się, że tylko jedna nie jest zerowa. Zadzwoń do mnie gęsty. Czy "readable_type" w tabeli "Readable" zawiera "B" dla książki, "I" dla wewnętrznej i "E" dla zewnętrznej? Dlaczego klucz podstawowy Book nie jest automatycznie zwiększany? Jak dodać nową lekturę określonego typu? Wiem, że jesteś zajęty, ale jeśli mógłbyś podać dalsze wyjaśnienie, w jaki sposób i dlaczego byłbym bardzo wdzięczny. Dziękuję Ci. – mpactMEDIA
Dodałem link do poprzedniej odpowiedzi, którą napisałem, w której bardziej szczegółowo omawiam rozwiązanie # 2. –
Dziękuję Bill bardzo doceniany. – mpactMEDIA