Нет ничего плохого во втором изображенном вами дизайне, с таблицей TagList
, за исключением того, что он занимает больше места.
То есть, если вы помечаете 10 000 элементов тегом «database-design», то в схеме с двумя таблицами вы должны хранить эту строку 10 000 раз. Если эффективность использования пространства более важна, вы можете использовать трехсторонний дизайн, который будет хранить только 4-байтовый целочисленный идентификатор для «дизайна базы данных» 10000 раз. Экономия 10 * 10000 байт.
Другое отличие состоит в том, что в схеме с тремя таблицами в таблице Tag
может быть несколько строк с одной и той же строкой, даже если они имеют разные значения целочисленных идентификаторов. Поэтому в таблице ItemTag
они могут показаться разными тегами, и вы никогда не узнаете, что они на самом деле помечены одинаково. Принимая во внимание, что в схеме с двумя таблицами теги с одинаковым написанием неявно группируются вместе.
Еще один момент: если у вас есть необходимость изменить написание тегов, то в дизайне с двумя таблицами вы должны обновить много строк. В дизайне с тремя таблицами вам нужно обновить только одну строку.
И, наконец, если вам обычно требуется список уникальных тегов, более быстрый запрос таблицы Tags
в схеме с тремя таблицами, вместо необходимости SELECT DISTINCT tag FROM TagList
каждый раз, когда вам нужен уникальный список. И последний дает вам только список используемых тегов , а не список всех подходящих тегов.