Моделирование счета за мобильный телефон: использовать ли наследование одной таблицы или полиморфные ассоциации? - PullRequest
0 голосов
/ 14 апреля 2010

В моем домене:

  • У пользователей много счетов
  • Счета имеют много BillItems (и, следовательно, пользователи имеют много BillItems через счета)
  • Каждый BillItem является одним из:
    • Вызов
    • SMS (текстовое сообщение)
    • MMS (мультимедийное сообщение)
    • Данные

Вот свойства каждого отдельного BillItem (некоторые являются общими):

альтернативный текст http://dl.dropbox.com/u/2792776/screenshots/2010-04-13_2146-1.png

Мой вопрос заключается в том, должен ли я моделировать это расположение с наследованием одной таблицы (то есть одной таблицей "bill_items" со столбцом "типа") или полиморфизмом (отдельные таблицы для каждого типа BillItem) и почему.

1 Ответ

2 голосов
/ 14 апреля 2010

Я бы пошел с Полиморфной ассоциацией, так как уже есть достаточно полей, которые не относятся ко всем / большинству элементов. STI просто потратит много места, но, игнорируя оптимизацию, это также очень жесткая конструкция, поскольку наиболее естественным способом расширения этой конструкции, когда требуется больше полей, будет добавление их в таблицу.

С другой стороны, полиморфная ассоциация указывает только контракт, которому должны следовать все разработчики. В этом случае в контракте говорится только о том, что предмет должен оплачиваться, и он позволяет каждому отдельному виду предметов развиваться независимо. Если между этими различными классами есть общая логика, может быть лучше просто преобразовать ее в модуль и включить ее.

...