Laravel (и не только) отношения «многие ко многим» принадлежат всем - PullRequest
0 голосов
/ 05 июля 2018

У меня есть две таблицы. «Продукты» и «Скидки». Затем я создаю соединительную таблицу «discount_product» для отношения «многие ко многим». Пока все хорошо.

Теперь, если я хочу, чтобы скидка принадлежала ВСЕМ товарам, я должен внести вкладки в соединительный стол для того количества продуктов, которое у меня есть. Это значит, что при наличии более 10000 товаров мне нужно будет вставить 10000+ строк для одной скидки в присоединяющуюся таблицу? И это только за одну скидку! Что если у меня 1000?

Это вынуждает меня вернуться к старому (неправильному) способу сделать это, когда у меня просто есть столбец «product_ids» в таблице «Discounts» с чем-то вроде этого «1 | 2 | 4 | 7 | 23 | .. . '(или' * 'для' принадлежит всем '), а затем создайте небольшой фрагмент кода PHP, чтобы проверить, принадлежит ли скидка всем или некоторым продуктам. Я знаю, что это неправильный способ сделать это. Так есть ли лучший способ сделать это правильно?

Состав:

**products**
  id 
  description
  price

**discounts**
  id
  procent
  value

**discount_product**
  product_id
  discount_id

1 Ответ

0 голосов
/ 05 июля 2018

Я предлагаю попробовать изменить бизнес-логику.

  • Если скидка отсутствует в discount_product, то это означает, что она распространяется на все товары.
  • Если скидка в discount_product, то это означает, что она действует только на определенный товар.
  • Если вам необходимо убедиться, что скидка не распространяется на какой-либо продукт, добавьте поле is_active в скидках.

Это только мои мысли.

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

...