Решение о структуре базы данных MySQL: многие ко многим используют таблицу ссылок или родительский идентификатор?

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

у меня есть две таблицы:

Catalogue          Items
ID | Descr        I_ID | Descr

в обеих таблицах все строки УНИКАЛЬНЫЕ

в терминах отношений записи из Catalogue могут иметь несколько записей из Items, но есть записи, которые не будут иметь Items

Items может иметь несколько отношений с Catalogue, но не обязательно каждый элемент будет иметь отношение к Catalogue.

Факт1 - в Items записей в 7 раз больше, чем в Catalogue

Факт2 - значит, если есть связь между Catalogue и Items - она ​​будет одинаковой из обеих таблиц.

какой у меня лучший вариант связать их?


person Elen    schedule 09.03.2012    source источник


Ответы (2)


Сделайте третью таблицу с именем catalogue_items. В таблице catalogue_items должны быть столбцы:

  1. ID -> Ссылка на ID каталога
  2. I_ID -> Ссылка на ID элемента

Сделайте новую запись каждый раз, когда эти двое каким-то образом связаны.

Я считаю, что это то, о чем вы просили в следующем вопросе:

"Select * from catalogue_items where Catalogue.ID = catalogue_items.ID"
person Community    schedule 09.03.2012
comment
наверняка использование родительского идентификатора в одной из таблиц будет включать только 1 операцию JOIN, в то время как наличие третьей таблицы вызовет 2 JOINs? Я упростил свой вопрос здесь, у меня уже есть больше соединений в таблице каталога, но они не связаны с элементами ... - person Elen; 09.03.2012
comment
Приведите мне пример запроса, который вам может понадобиться здесь, и я помогу вам создать правильный оператор SQL. Используя этот метод, вы легко можете получить любые данные, которые могут вам понадобиться. - person ; 09.03.2012
comment
нет, на самом деле вышеупомянутый запрос не работает, поскольку мы не присоединились к Catalogue таблице ... мне нужно выбрать все элементы из Items и, где это применимо, отобразить Catalogue.Descr - как это будет выглядеть с таблицей ссылок? - person Elen; 13.03.2012

Самый простой способ - это таблица пересечений, например:

Item_Catalog

CatalogId | ItemId

person John    schedule 09.03.2012
comment
просто, а как насчет эффективности поиска? и я немного не уверен, как будет выглядеть мой запрос, чтобы присоединиться к ним ... - person Elen; 09.03.2012
comment
Что ж, если у вас есть индексы по первичному и внешнему ключам, это будет очень быстро. - person John; 09.03.2012