2015-06-27 2 views
-2

Я работаю над базой данных для новостного сайта и не уверен, что лучше всего разделить таблицы. Он будет иметь четыре различные категории, каждая из которых содержит различные поля:Как настроить реляционную базу данных с несколькими типами сообщений?

Новости

  • Заголовок
  • Subhead
  • Дата
  • Содержание История
  • Дополнительное фото

Вебинар

  • Дата
  • Время
  • Ссылка

Событие

  • Имя
  • Дата
  • Время
  • Расположение
  • Описание
  • Ссылка

Конкурс

  • Дата начала
  • Имя
  • Описание

Должен ли я сделать:

  • одну таблицу для всех из них
  • другую таблицу для каждой категории типа
  • или стол со всеми общими полями, а также отдельные таблицы для уникальных значений каждой категории в?

ответ

2

Нет ни одного «правильного» ответа. Это зависит от нескольких факторов.

(. К счастью, вы не упомянули реализации Субъект Значение атрибута() модель EAV я настоятельно рекомендую вам избежать этого.)

Некоторые факторы, чтобы рассмотреть следующие вопросы:

Рассмотрим отношения ... будет каждый «категория» имеет те же отношения с другими объектами? Вы показываете «событие», имеющее атрибут location ... это атрибут, или это означает отношение к другому объекту?

Рассмотрите, как ваши запросы нужно будет записать. Вам часто придется запрашивать строки из нескольких «категорий» вместе?Для большого количества строк для лучшей производительности вам нужно избегать встроенных представлений, чтобы использовать UNION ALL для объединения отдельных таблиц в один вид.

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

Followup

Если требуется обрабатывать каждую категорию в отдельности, и вам не нужно запрашивать комбинированную категорию, то я бы с отдельной таблицей для каждой категории (вариант 2), для легкость и простоту.

Если вам нужно запросить объединенную категорию (например, выбрать из любой категории ORDER BY date_col, то я, вероятно, поеду с отдельной таблицей с столбцом дискриминатора (category), чтобы иметь возможность различать, какая категория является строкой. ограниченное количество атрибутов, у меня возникнет соблазн определить все атрибуты, а затем просто заполнить те, которые применяются к каждой категории. (Вариант 1)

Третий вариант также может быть выполнен. для работы.

+0

Это будет довольно просто, я не думаю, что любой из атрибутов будет иметь отношение к другим объектам. На главной странице будут перечислены столбцы, под заголовком, датой, категорией и описанием, со ссылкой на полную статью. Также будет выпадающее меню, в котором вы можете выбрать только просмотр из определенной категории. Благодарим вас за советы по поводу использования 'UNION ALL'. Я полный ноб, так что хорошо знать эти вещи (также не имел понятия, что существует термин для иерархии наследования) ... мое образованное предположение было бы использовать мое третье предложение. Правильно ли это звучит? – user1966246

+0

Также, когда вы переходите к определенной записи, он будет перечислять другие сообщения в этой категории, если это имеет значение – user1966246