Рекомендуемый дизайн базы данных 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

2022-10-31T12:12:49+00:00
Вопросы с похожей тематикой, как у вопроса:

Рекомендуемый дизайн базы данных SQL для тегов или тегов