Как хранить теги в тегах MySQL, всего одно поле или одно поле для каждого тега? - PullRequest
2 голосов
/ 30 ноября 2009

Я разрабатываю продукт, близкий к stackoverflow.com. Плакат необходим для ввода тегов для его задачи или задачи. Как сохранить эти теги в базе данных, общее поле (столбец) или одно поле (столбец) для одного тега?

Ответы [ 2 ]

8 голосов
/ 30 ноября 2009

Я думаю, что отношения Многие ко многим помогут вам

что-то вроде

--------             -----------------           ------------
- tags -   <-------> - products_tags - <-------> - products - 
--------             -----------------           ------------

редактирование:

Подход «многие ко многим» является более нормализованным, но я думаю, что его сложнее всего реализовать, поскольку в этом случае он основан на объединениях для получения всех тегов для данного «продукта». Преимущества:

  1. полностью нормализовано
  2. СУХОЙ : с если вам нужно изменить имя тега вы можете сделать это, и вы увидите изменить везде
  3. и т.д.

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

2 голосов
/ 30 ноября 2009

Я бы сделал что-то вроде этого ...

tblAvailableTags
  - tag_id
  - tag_name

tblTasks
  - task_id
  - task_name
  - ...etc

tblTaskTags
  - task_tag_id
  - task_id
  - tag_id

Так что tblTaskTags будет вашей связью между двумя ... так что вы можете сделать что-то с эффектом

SELECT * FROM tblTaskTags WHERE task_id = идентификатор выбранной задачи

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