Как смоделировать теги в базе данных?
-
19-09-2019 - |
Вопрос
У меня есть существующее веб-приложение, и я хочу добавить функцию тегирования, чтобы пользователи могли помечать существующие объекты.Вопрос в том, должен ли я добавить столбец тега к каждому объекту?или я должен нормализовать его и использовать таблицу тегов, где каждый объект будет иметь коллекцию тегов?Я склоняюсь к последнему, потому что он кажется более чистым, по нему легче создавать отчеты и проще создавать облако тегов.Но поскольку я знаю, что это решалось 1000 раз, я хотел спросить и посмотреть, не упускаю ли я чего-то?
Решение
Предвидите ли вы, что пользователям потребуется связать с объектом более одного тега?
Если нет, добавьте TAG_ID fk в таблицу ОБЪЕКТОВ.В противном случае вам понадобилось бы всего три таблицы, чтобы правильно смоделировать отношение "многие ко многим":
ОБЪЕКТ
- OBJECT_ID (pk) ОБЪЕКТ_ИД (pk)
ОБЪЕКТ_ТЕГ_XREF
- OBJECT_ID (pk, fk для ОБЪЕКТА)
- TAG_ID (pk, fk для ТЕГИРОВАНИЯ)
ТЕГ
- TAG_ID (pk)
Другие советы
Да, вы должны привести это в норму."Столбец тегов" либо будет поддерживать только один тег для каждой записи, либо будет иметь отвратительную производительность поиска.
Определенно нормализуется.Таблица для тегов, таблица для ваших существующих объектов и таблица связей между ними.