Структура базы данных по типу поста - PullRequest
0 голосов
/ 13 января 2011

Мне было интересно, как лучше подходить к использованию типов записей с разными полями. Тип сообщения сообщения (заголовок, тело) может иметь поля, отличные от поля фотографии (заголовок, путь URL, описание) и т. Д.

В идеале мне бы хотелось, чтобы это было под одной таблицей. Посты, так как тогда их будет проще объединить в виде. Это может сработать, показывая и скрывая поля с помощью jQuery, но это оставит избыточные поля в БД.

Какие-нибудь предложения о том, как это сделать?

Спасибо

Ответы [ 2 ]

1 голос
/ 13 января 2011

Я бы порекомендовал

  1. Общая таблица сообщений с полем типа сообщения.
  2. Таблица типов сообщений
  3. Специальные таблицы для отдельных типов сообщений.

Таким образом, для полей, которые применяются ко всем типам сообщений, они хранятся в общей таблице сообщений.

Затем вы можете использовать идентификатор типа записи, чтобы найти дополнительные поля и извлечь данные для этих полей на основе идентификатора типа записи.

Так что ваша общая таблица сообщений будет выглядеть как

| id | название | author_id | текст |

Вы публикуете таблицу типов:

| id | post_type | <- post_type - это строка </p>

И скажем, у вас есть тип поста "календарь", которому нужно поле даты. Мы назовем это типом фотографии. Таблица будет называться «calendar_post_fields», а тип записи будет «календарь».

| id | post_id | дата |

0 голосов
/ 13 января 2011

обо всем по порядку.У вас есть возможность добавлять новые «типы» во время выполнения?Ответ на этот вопрос может сделать недействительными в противном случае твердые решения.

Если ответ на вопрос «нет», то воспользуйтесь решением Гаргантюана.Иметь базовую таблицу для общих полей и отдельную таблицу для конкретных полей.Конкретные таблицы имеют внешний ключ к базовой таблице.Этот способ позволяет избежать динамического SQL, избежать избыточных полей и обеспечивает хорошую производительность запросов.

Существуют и другие решения, но я бы не стал их упоминать, если только вышеприведенное решение не отвечает вашим потребностям.

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