Размышляя логически о структуре базы данных: добавление тегов к публикациям пользователей - отдельная таблица или ... - PullRequest
3 голосов
/ 21 февраля 2010

Я все еще начинаю осваивать всю эту реляционную базу данных. Во всяком случае, я программист PHP, поэтому я могу делать все это шаббанг. Мне просто нужно подумать, что будет лучшим методом для этого сценария ...

Я занимаюсь разработкой сайта (с помощью CodeIgniter, если это поможет) - сайта, на котором пользователи могут публиковать контент (например, в стиле блога). Каждое сообщение должно иметь теги, любое количество тегов, я не могу ограничиться, скажем, 3 или 5. Это должно быть неограниченным.

Так, что из этого я делаю?

  1. Поместите теги рядом с записями в той же таблице базы данных, то есть «записи» содержат «запись», «заголовок» и «теги» (и, очевидно, «идентификатор»)
  2. Поместите теги в собственную таблицу и свяжите каждую строку тегов с записью (ями) 'id' ...?
  3. ... Что-то еще целиком?

Просто нужно знать лучший, наиболее логически структурированный способ сделать это. Думать о том, что столы общаются друг с другом, достаточно запутанно ...!

Да, и бонусные баллы всем, у кого есть фрагменты CodeIgniter, которые могут помочь мне в пути;)

Спасибо!

Jack

Ответы [ 2 ]

6 голосов
/ 21 февраля 2010

Как правило, вы хотите n-m отношение между тегами и сообщениями:

  • каждое сообщение может иметь несколько тегов
  • каждому тегу может соответствовать несколько сообщений.


Используя реляционную базу данных, это делается с помощью трех таблиц:

  • таблица «post», содержащая одну строку на сообщение
  • таблица «tag», которая содержит одну строку на тег
  • и таблица "post_tag", которая содержит одну строку на соответствие между тегом и публикацией - что означает несколько строк на тег; и несколько строк на пост


В вашей БД есть три таблицы:

  • сообщение
    • ID
    • название
    • содержание
    • ...
  • post_tag
    • id_post => внешний ключ к сообщению

    • id_tag ​​=> внешний ключ к тегу

  • бирка
    • ID
    • имя
3 голосов
/ 21 февраля 2010

Вы хотите отношения многих ко многим. Это моделируется в базе данных тремя таблицами:

  • Сообщение * * 1004
  • Tag
  • PostTag

PostTag содержит внешний ключ для таблицы Post и таблицы Tag. Он имеет одну строку для каждого тега в каждом сообщении.

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