Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Проектирование БД Новый топик    Ответить
 Связь один к одному по множеству полей, как правильно?  [new]
FJ-JF
Member

Откуда:
Сообщений: 1
Суть задачи:

Сумма Скидка на Продукт должна определяться динамически и зависеть он набора определенных условий, а именно:

  • Скидка зависит от "Способа Оплаты\покупки товара" (Оплата всей суммы сразу\оплата товара частями);
  • Скидка зависит от "Остатков товара на складе" (Товара на складе может быть: Мало\Средне\Много);
  • Скидка зависит от "Категории товара" (Компьютер\Телевизор\Телефон);
  • Скидка зависит от "Производителя" (Apple\SamsumXaomi);
  • Скидка зависит от "Пользователя" (Зарегестрированный\Гость)

    и тд, таких зависимостей может быть порядка 10.

    Если рассматривать самый простой упрощенный вариант, когда Скидка зависит только от, например, Производителя, то это связь 1 к 1:

    - в одной таблице DISCOUNT записывам сумму скидки и MANUFACTURER_ID и вторая таблица MANUFACTURER со списком всех производителей
    - или даже все делаем в одной таблицес двумя столбцами DISCOUNT_AMOUNT и MANUFACTURER_NAME, где MANUFACTURER_NAME ничто иное как ENUM.

    Сложнее становиться когда Сумма Скидки начинает зависеть от группы параметров, рассмотрим вариант, когда Скидка будет зависеть от Производителя и Остатков товара на складе, все так же мы можем обойтись одной таблице но уже с полями:

    DISCOUNT (1%, 2%..),
    MANUFACTURER (Apple, Sony, Samsung) и
    STOCK_BALANCE (LOW, MIDDLE, HUGE)

    а если вспомнить, что таких критериев может быть около 10, то в таблице будет 11 столбцов, вроде ничего страшного, но вот количество записей и количество комблинаций может быть достаточно большим, например:


    Для зарегистрированного пользователя, который хочет купить Телефон Samsung, которых на складе Много и готов сделать полную оплату предоставить скидку X%.

    и тд.

    Мой вопрос: как правильно архитектурно построить таблицу (ы) для решения данной задачи?
    Какие best practice используются?
    Не прошу решить за меня, а просто подтолкните в правильном направлении.

    Спасибо.
  • 1 апр 19, 00:14    [21848554]     Ответить | Цитировать Сообщить модератору
     Re: Связь один к одному по множеству полей, как правильно?  [new]
    softwarer
    Member

    Откуда: 127.0.0.1
    Сообщений: 58418
    Блог
    FJ-JF
    Мой вопрос: как правильно архитектурно построить таблицу (ы) для решения данной задачи?

    Ваш вопрос несколько преждевременен. Универсальный ответ на него: так, чтобы она соответствовала бизнес-логике. А вот бизнес-логика в постановке задачи пока что не проработана; когда проработаете - тогда станет намного яснее, как строить модель.

    Просто как пример: допустим, на товары Samsung вы даёте скидку 10%. На телефоны вы даёте скидку 20%. Если товара на складе мало, вы даёте скидку 30%. Вопрос: какую скидку вы дадите покупателю, желающему купить Samsung Galaxy SIII?
    1 апр 19, 01:56    [21848597]     Ответить | Цитировать Сообщить модератору
     Re: Связь один к одному по множеству полей, как правильно?  [new]
    Кот Матроскин
    Member

    Откуда: Москва
    Сообщений: 8927
    Можно разделить на 2 таблицы - Скидки (Название, ПериодДействия, Активность, Размер, ...) и УсловияСкидок (ТипУсловия (AND или OR), СтрокаУсловия, ...). Это потребует создания простенького (а может и не очень простенького) интерпретатора строк условий, но зато не надо мучиться со сложной структурой.
    Ну и Вам, конечно, надо определиться - Вы хотите от системы скорости или универсальности.
    Если надо на лету рассчитывать скидки для сотен тысяч товаров для каждого покупателя отдельно - возможно, универсальностью придется жертвовать.
    1 апр 19, 10:24    [21848710]     Ответить | Цитировать Сообщить модератору
     Re: Связь один к одному по множеству полей, как правильно?  [new]
    KreatorXXI
    Member

    Откуда: Москва
    Сообщений: 780
    FJ-JF,

    делайте условия скидок в таблице Discount. Будет 11 полей или больше. Ну и что? Можно разделить на две таблицы или ещё помудрить. Но только, если условия по скидкам совсем неопределённые, заказчик планирует сам придумывать схемы.
    1 апр 19, 13:51    [21848934]     Ответить | Цитировать Сообщить модератору
     Re: Связь один к одному по множеству полей, как правильно?  [new]
    vmag
    Member

    Откуда: MP
    Сообщений: 3235
    FJ-JF,

    Курсач? Абстрактная задача супермаркета на необитаемом острове?

    Реально то, - ты хоть 20 условий скидок придумай, но если в соседнем магазине телевизор дешевле, твой никто не купит...

    Проще плясять от цены закупки, если не можешь выставить от неё конкурентную цену продажи, которая обеспечит аренду, зарплату, налоги и прибыль - все остальное не имеет смысла...
    4 апр 19, 00:22    [21851922]     Ответить | Цитировать Сообщить модератору
    Все форумы / Проектирование БД Ответить