Как бороться с дисконтной таблицей? - PullRequest
2 голосов
/ 08 февраля 2020

У меня есть эти таблицы:

категории:

name - created_at

продукты:

id - name - price - quantity - category_id - brand_id

У меня есть эти две таблицы, мне нужно создать скидку на мои продукты как владелец магазина. Поэтому я создал таблицу скидок:

скидки:

id - type('percentage','numeric') - value - cancel - expired_at

Поэтому мне нужно:

1 - чтобы поставить скидку на все товары, которые относятся, например, к категории (T- рубашка)

2 - чтобы сделать скидку на указанный c продукт или продукты, которые мне нужны

МОЙ закрытый:

создал две сводные таблицы:

discount_product ( discount_id -  product_id )

discount_category ( discount_id - category_id ) 

Это лучший способ сделать что-то подобное?

1 Ответ

1 голос
/ 08 февраля 2020

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

Ниже приведена просто возможность, вы можете ее игнорировать, но попробуйте прочитать ее

Но я бы хотел упомянуть несколько возможностей

  • что, если владелец магазина захочет применить скидки к указанному бренду c? (предположим, что вы согласны добавить эту функцию), например, он хочет, чтобы на все продукты Raymond была скидка? В текущей схеме вам нужно будет найти все продукты с помощью brand_id Рэймонда и добавить отдельные записи в таблице discount_product для всех этих продуктов (не очень сложно, но данные в таблице станут очень большими) или создать новый сводный стол для брендов.
  • Аналогичным образом, если продавец хочет получить скидку на все рубашки Raymond (брендовые) (категория I), опять же нет другого выбора, кроме как применить скидку к отдельным товарам.
  • И Что делать, если скидка только для определенного пола или возрастной группы?
  • Или размер одежды

(хорошо, я знаю, что я все это слишком обдумываю, так как шансы на такие требования малы. Если так Есть много требований, может быть, лучше использовать библиотеку или перейти на WordPress / Magento).

Поэтому я хочу сказать, что присоединение этих скидок к отдельным продуктам кажется простым выходом (если вы не t создать сводные таблицы для каждого типа скидки), если вам нужна большая гибкость (что лично мне кажется важным т тоже. Гибкий проект легче расширить, и люди, которым придется работать над проектом в будущем, будут вас гораздо меньше проклинать) не лучше ли вести единую сводную таблицу и дифференцировать их по типу? (aaargghhh звучит как боль ...... но так ли это?)

Хорошо Laravel имеет решение для вас, Polymorphi c Отношения . Да, теперь вам нужна только одна таблица для опорных точек, и пусть Laravel делает волхвы c (ну, в ней просто хранится имя модели с пространством имен в столбце типа). Это становится намного сложнее, если вы не хотите использовать Laravels Polymorph, вам понадобится таблица для типа, сохраните каждый тип в этой таблице, а затем поместите внешний ключ в сводную таблицу.

Но прежде чем прыгнуть и выбрать следовать этому методу, подумайте, действительно ли он вам понадобится? (Я признаю, что большая часть этого даже не в вашем вопросе, я только упомянул об этом из-за того, что я переосмыслил это) Вы уверены, что вам понадобятся только эти два типа скидок? Не могли бы вы просто отклонить какие-либо запросы для других типов? Тебя не волнует, кто бы ни убрал твой беспорядок? Если ваш ответ «да», просто придерживайтесь текущей схемы.

Итак, выберите то, что вам кажется более подходящим

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...