Я разрабатываю продукт, близкий к stackoverflow.com. Постер обязан ввести теги к своей проблеме или задаче. Как хранить эти теги в базе данных, одно поле (столбец) всего или одно поле (столбец) для одного тега?
Как хранить теги в тегах MySQL, одно поле всего или одно поле для каждого тега?
Ответы (2)
Я думаю, что отношение многие ко многим поможет вам
что-то типа
-------- ----------------- ------------
- tags - <-------> - products_tags - <-------> - products -
-------- ----------------- ------------
редактировать:
подход «многие ко многим» является более нормализованным, но я думаю, что его сложнее всего реализовать, поскольку в этом случае он основан на соединениях для получения всех тегов для данного «продукта». преимущества:
- полностью нормализовалось
- DRY: если вам нужно изменить имя тега, вы можете это сделать, и вы увидите изменение везде
- и Т. Д.
другой подход состоит в том, чтобы сохранить все теги в одном поле, разделенном чем-то (скажем, запятой). Здесь у вас есть скорость с точки зрения получения тегов. вам просто нужно разделить теги этим разделителем и все. Сохранение тегов также стало проще. но мне не нравится этот подход, потому что, если вам нужно обновить шаблон, вам нужно переходить по статье, разделять, обновлять, а затем сохранять.
Я бы сделал что-то вроде этого...
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 = выбранный идентификатор задачи