отношение "многие ко многим" при проектировании базы данных

StackOverflow https://stackoverflow.com/questions/1273715

  •  16-09-2019
  •  | 
  •  

Вопрос

В настоящее время у меня есть база данных с двумя таблицами , называемыми Articles и Tags .Чтобы статьи могли быть в нескольких категориях, у меня есть отношение "многие ко многим".Является ли ошибкой иметь такой дизайн с точки зрения производительности?или я должен удалить связь между этими двумя таблицами и добавить третью таблицу в качестве связующего звена (articlesTags)?

Это было полезно?

Решение

По сути, нет ничего плохого в том, чтобы иметь отношения "многие ко многим", вам просто нужно создать Соединительный Стол (именно это, похоже, вы имеете в виду с articlesTags), чтобы облегчить эти отношения.

Другие советы

Вы видите разницу между концептуальным дизайном базы данных (отношением N: N) и ее физической реализацией.Независимо от того, как вы моделируете свои отношения N: N, вам понадобится вышеупомянутая таблица соединений, чтобы заставить ее работать.

Нет ничего плохого в том, чтобы смоделировать отношения в реальном мире как можно ближе к реальному миру в качестве общего утверждения.Ясность - это король.

Когда дело доходит до любого вопроса о производительности в любой системе, ответ обычно сводится к "это зависит".

Если ваша проблема с производительностью связана с ЗАПИСЯМИ, то лучше всего использовать сильно нормализованную структуру, и вам понадобится эта таблица соединений.В конечном итоге вы запишете намного меньше данных, и это может существенно ускорить процесс (хотя вы можете использовать это преимущество, выполнив поиск перед созданием вставок).Чтение из отдельных нормализованных таблиц также может быть очень быстрым.

Если ваша проблема связана с аналитическим чтением, то лучше всего использовать денормализованную структуру.Объединения могут быть очень трудоемкими, если таблицы большие, а индексы распределены.Вы пожертвуете большим пространством, чтобы выиграть много времени.

В общем, вы хотите взглянуть на специфику вашей ситуации и взвесить плюсы и минусы каждого подхода, прежде чем принимать решение.Лично я всегда считал, что лучше сосредоточиться на ясности на начальных этапах и провести рефакторинг для повышения производительности, если я обнаружу проблему позже.

Отношения "многие ко многим" существуют в модели отношений, это просто абстракция ума.Когда вы это реализуете, появится таблица article_to_tags, в которой у вас будет :

fk_article(ЦЕЛОЕ ЧИСЛО) fk_tag(ЦЕЛОЕ ЧИСЛО)

см . http://en.wikipedia.org/wiki/Many-to-many_ (data_model) (модель данных)

Нет никакой проблемы в использовании отношений "Многие ко многим".Это часто требуется.

И да, невозможно создать отношение "многие ко многим" без использования третьей таблицы.

Нет проблем с наличием отношения "многие ко многим", если это то, чего требуют данные, но вам понадобится третья таблица для его представления.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top