Как определить, в каком направлении должны следовать отношения "многие ко многим"?

У меня есть Product и Product Category,

Я могу определить Product has Product Category отношения или Product Category has Product,

Оба имеют смысл для меня. Моя цель - создать группу продуктов, чтобы упростить их классификацию. я вижу Product Category как вспомогательное понятие, а не конкретное понятие. то есть Product что-то, что я могу продать, что-то, что я могу положить в корзину и т. д. Я не могу сделать это с Product Category, Но я могу использовать его для группировки вещей, то есть показать список Productчто принадлежит определенному Product Category,

Я предполагаю, что отношение "многие ко многим" является симметричным, и существует два способа его создания. Как я могу определить, какое направление является правильным в моем случае? Есть один?

2 ответа

Поскольку "многие ко многим" является двунаправленным, на самом деле нет необходимости рассматривать "правильное направление". Что касается дизайна, я бы создал product_category как статическую таблицу только с первичными ключами; таблица продуктов с собственными столбцами первичного ключа, такими как идентификатор продукта; и третья ассоциативная таблица, которая использует внешние ключи первичных ключей из двух таблиц.

PRODUCT_TAGS
PROD_ID | CAT
21| Отопление
21| Безопасность
25| Отопление
37| Освещение
37| Безопасность

Я думаю, что у вас отношения один-ко-многим, а не многие-ко-многим.

Всякий раз, когда я смотрю на отношения любого типа, я задаю себе вопрос о таблицах (используя ваши имена таблиц):

У продукта много категорий, или у категории много продуктов?

Если первая точка верна, то идентификатор из таблицы продуктов входит в таблицу категорий. В противном случае идентификатор из таблицы категорий попадает в таблицу продуктов.

Если оба факта верны (товар имеет много категорий, а в категории много товаров), вам понадобится объединяющая таблица.

Я предполагаю, что в категории есть много товаров, но товар может иметь только одну категорию. Если это правда, вы бы добавили category_id в таблицу продуктов.

Если это отношение "многие ко многим", ваша таблица будет выглядеть следующим образом: product_category_map (product_id, category_id)

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

Другие вопросы по тегам