Каков наилучший подход для представления случая обобщения для сайта форума? - PullRequest
0 голосов
/ 27 ноября 2018

Я смоделировал следующий UML для базы данных нашего веб-сайта (проект uni): UML diagram

Однако я не могу найти способ преобразования в SQLслучай обобщения между Post, Story и Comment.Мой учитель предложил использовать ту же таблицу, но я думаю, что это ограничивает меня, если я хочу добавить больше функций, таких как теги для историй.Прямо сейчас у меня уже есть два дополнительных отношения: пост может иметь несколько дочерних комментариев, а история принадлежит определенному каналу.

Должен ли я следовать совету моего учителя?Или я должен использовать 3 класса?

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

Поскольку ваша иерархия классов имеет только два подкласса, которые имеют только 3 дополнительных свойства (title, channel и post), вам следует использовать подход Single Table Inheritance .Даже если позже вы сможете добавить еще несколько свойств / методов, это будет лучшим выбором, поскольку реализация иерархии классов с несколькими таблицами потребует гораздо больших усилий / накладных расходов.

Подробнее об этом можно прочитатьвыбор в разделе Представление иерархий классов с помощью таблиц базы данных SQL (из руководства по обработке иерархий классов в интерфейсном веб-приложении JavaScript, созданного мной).

0 голосов
/ 27 ноября 2018

Как всегда, это зависит.Наличие единственной таблицы имеет преимущество в доступе к соответствующей информации поста в простом запросе и просто в просмотре флага внутри столбца, указывающего, с каким объектом вы имеете дело.Наличие отдельных таблиц - это более «академический» способ решения этой проблемы, поскольку вы (как вы заметили) разделили информацию об объекте.

Я бы, вероятно, пошел в этом случае с использованием единого стола.Но - YMMV - вы также можете придерживаться своего подхода к 3 столам.Здесь могут прийти другие мнения.Просто подождите несколько дней, чтобы решить: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...