Поля базы данных «Тип контента» - PullRequest
1 голос
/ 26 июля 2011

Извините за глупый заголовок, но я не знаю, как еще назвать этот вопрос:)

Поэтому я пытаюсь создать очень простую систему управления контентом, которая хранит данные в базе данных.

Один из типов данных - это «тип контента» (аналогично постам / пользовательским типам постов WordPress).

Тип контента может быть любым: страница, список автомобилей, комментарий,книжный продукт и т. д.

Каждый тип контента имеет свои поля.Например:

  • a page имеет: название, текст.
  • a car список содержит: марка, модель, тип,год, цена, ...
  • книга имеет: название, автор, цена

и т. д. *

Идея состоит в том, что эти типы контента являются динамическими (как и их поля).Они будут добавлены через расширение CMS.Единственным встроенным типом контента будет страница.

В любом случае, мне нужен совет о том, как настроить таблицы базы данных для них.Это должно быть сделано из основной CMS, а не из расширений, которые, как предполагается, очень легко написать с помощью CMS API.

Как мне настроить таблицы / поля таблиц таким образом, чтобы поискрезультаты, основанные на определенных полях типа контента, будут очень быстрыми?

WP использует другую таблицу для полей и сохраняет их в виде строк с идентификатором, указывающим на сообщение, к которому они прикреплены.Но это довольно медленно, когда вы ищете несколько полей ...

Ответы [ 2 ]

1 голос
/ 28 июля 2011

id указывает на первое решение Невилла К., для которого потребуется структура с 4 таблицами.
contents,
content_properties_name,
content_properties_values и объединены в contents_properties (content_id , content_property_id , content_value_id ).

это быстро, поисковые запросы немного сложнее

1 голос
/ 26 июля 2011

Есть куча разных опций.

Наиболее распространенным является хранение пар «ключ / значение» (я считаю, что это модель WP) вместе с элементом контента. У этой модели много проблем - булева логика, когда поиск быстро становится неразборчивым, типы контента нелегко определить и проверить в коде (например, «все типы контента CAR должны иметь размер механизма атрибутов») и т. Д. легко создавать и изменять типы контента.

Другая модель заключается в создании таблиц базы данных на основе типов контента, обычно с «базовым» элементом контента в качестве корневого. В книге Лармана есть хорошее обсуждение того, как моделировать таблицы базы данных («Применение UML и шаблонов»). Этот дизайн создает большое количество служебного кода - создание и изменение таблиц базы данных является проблемой, и я бы не рекомендовал делать это для решений, где вам потребуется много типов контента.

Самое надежное решение, которое я видел, использует XML для хранения контента - часто в базе данных. XML позволяет вам определять тип контента (используя DTD или схему) и проверять / запрашивать его. Хотя это не так быстро, как SQL ...

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