Рекомендуемый дизайн базы данных SQL для тегов или тегов
Обычно я соглашусь с Яаковом sqlselect Эллисом, но в этом особом table-design случае есть другое жизнеспособное schema-design решение:
Используйте две таблицы:
Table: Item
Columns: ItemID, Title, Content
Indexes: ItemID
Table: Tag
Columns: ItemID, Title
Indexes: ItemId, Title
У data-modelling этого есть несколько основных table-design преимуществ:
Во-первых, это table-design значительно упрощает разработку: в database-design решении с тремя таблицами schema-design для вставки и обновления data-modelling item
вам нужно найти таблицу schema-design Tag
, чтобы увидеть, есть ли tag уже записи. Тогда вы должны data-modelling присоединить к ним новые. Это data-modeling нетривиальная задача.
Затем database-modeling он делает запросы проще (и, возможно, быстрее). Вам sqlselect нужно выполнить три основных sqlselect запроса к базе данных: вывести sql-syntax все Tags
для одного Item
, нарисовать sql-syntax облако тегов и выбрать все sql-query элементы для одного заголовка sql-syntax тега.
Все теги для одного элемента:
3 стола:
SELECT Tag.Title
FROM Tag
JOIN ItemTag ON Tag.TagID = ItemTag.TagID
WHERE ItemTag.ItemID = :id
2 стола:
SELECT Tag.Title
FROM Tag
WHERE Tag.ItemID = :id
Облако тегов:
3 стола:
SELECT Tag.Title, count(*)
FROM Tag
JOIN ItemTag ON Tag.TagID = ItemTag.TagID
GROUP BY Tag.Title
2 database-modeling стола:
SELECT Tag.Title, count(*)
FROM Tag
GROUP BY Tag.Title
Элементы для одного тега:
3 стола:
SELECT Item.*
FROM Item
JOIN ItemTag ON Item.ItemID = ItemTag.ItemID
JOIN Tag ON ItemTag.TagID = Tag.TagID
WHERE Tag.Title = :title
2 стола:
SELECT Item.*
FROM Item
JOIN Tag ON Item.ItemID = Tag.ItemID
WHERE Tag.Title = :title
Но schema-design есть и некоторые недостатки: это tags может занять больше места sql-select в базе данных (что может database-modeling привести к большему количеству sql операций с диском, которые data-modeling будут медленнее), и он не sql-query нормализован, что может привести data-modelling к несоответствиям.
Аргумент sql-query размера не так уж силен, потому data-modeling что сама природа тегов такова, что tags они обычно довольно малы, поэтому sqlselect увеличение размера не является sql-query большим. Можно утверждать, что tags запрос заголовка тега выполняется data-modelling намного быстрее в небольшой tag таблице, которая содержит database-design каждый тег только один раз, и table-design это, безусловно, правда. Но sql-query с учетом экономии за счет tagging отсутствия присоединения tagging и того факта, что вы можете tags построить на их основе хороший database-design индекс, можно легко это компенсировать. Это, конечно, сильно sqlselect зависит от размера используемой sql базы данных.
Аргумент о непоследовательности sql-query тоже немного спорен. Теги tag - это поля с произвольным database-design текстом, и здесь не требуется database-design операции типа «переименовать sql-select все теги с« foo »в« bar »».
Итак, tldr: я sqlselect бы выбрал решение с двумя tags столами. (На самом деле я tag собираюсь это сделать. Я tagging нашел эту статью, чтобы узнать, есть tagging ли веские аргументы против sql-query нее.)
sql
database-design
tags
data-modeling
tagging
Рекомендуемый дизайн базы данных SQL для тегов или тегов
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.