Рекомендуемый дизайн базы данных SQL для тегов или тегов
Обычно я соглашусь с Яаковом schema-design Эллисом, но в этом особом sql-select случае есть другое жизнеспособное sqlselect решение:
Используйте две таблицы:
Table: Item
Columns: ItemID, Title, Content
Indexes: ItemID
Table: Tag
Columns: ItemID, Title
Indexes: ItemId, Title
У data-modeling этого есть несколько основных sqlselect преимуществ:
Во-первых, это data-modelling значительно упрощает разработку: в sql-syntax решении с тремя таблицами sql-syntax для вставки и обновления database-design item
вам нужно найти таблицу sql-select Tag
, чтобы увидеть, есть ли tags уже записи. Тогда вы должны sqlselect присоединить к ним новые. Это sql нетривиальная задача.
Затем schema-design он делает запросы проще (и, возможно, быстрее). Вам schema-design нужно выполнить три основных database-design запроса к базе данных: вывести tag все Tags
для одного Item
, нарисовать sql облако тегов и выбрать все sql-syntax элементы для одного заголовка 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 data-modelling стола:
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 есть и некоторые недостатки: это sql может занять больше места database-design в базе данных (что может data-modeling привести к большему количеству database-modeling операций с диском, которые data-modelling будут медленнее), и он не data-modelling нормализован, что может привести tag к несоответствиям.
Аргумент tags размера не так уж силен, потому data-modelling что сама природа тегов такова, что database-modeling они обычно довольно малы, поэтому table-design увеличение размера не является tags большим. Можно утверждать, что sql запрос заголовка тега выполняется tagging намного быстрее в небольшой data-modeling таблице, которая содержит schema-design каждый тег только один раз, и database-modeling это, безусловно, правда. Но sql-query с учетом экономии за счет sql отсутствия присоединения sql и того факта, что вы можете sql-syntax построить на их основе хороший table-design индекс, можно легко это компенсировать. Это, конечно, сильно schema-design зависит от размера используемой schema-design базы данных.
Аргумент о непоследовательности sql тоже немного спорен. Теги database-design - это поля с произвольным table-design текстом, и здесь не требуется sql операции типа «переименовать tagging все теги с« foo »в« bar »».
Итак, tldr: я data-modelling бы выбрал решение с двумя data-modeling столами. (На самом деле я sql-query собираюсь это сделать. Я schema-design нашел эту статью, чтобы узнать, есть tagging ли веские аргументы против data-modeling нее.)
sql
database-design
tags
data-modeling
tagging
Рекомендуемый дизайн базы данных SQL для тегов или тегов
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.