Это хорошая практика для базы данных для продуктов с несколькими единицами, себестоимостью и сроком годности - PullRequest
0 голосов
/ 05 мая 2019

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

Это то, о чем я думал до сих пор.

Создание 3 таблиц (1. Product_info - 2.Product_Stock - 3.единиц), а ниже приведена подробная структура:

    Units Table
--------------------------
id Name 
  |------|
1 |Piece |
2 |Pack  |
3 |Kilos |

Здесь я перечислю все единицы, которые я буду использовать в качестве единицы базового продукта.


                Product Information Table
----------------------------------------------------------------------------------------------------------------------- 
id Name   AvgCostPrice AvgPrice AvgPackCostPrice AvgPackPrice totalQuantity BaseUnitID  multiplier PackBarcode  Barcode
  |------|------------|--------|----------------|------------|-------------|----------|----------|------------|--------|
1 |Soda  |            |        |                |            |  108        | 1        | 12       |   111111   | 111222 |
2 |Water |            |        |                |            |  50         | 1        | 6        |   222222   | 222111 |


  1. в приведенном вышеВ таблице средняя себестоимость и цена продажи для пачек и кусков будет рассчитываться исходя из различных запасов, которые у меня есть для указанного продукта.
  2. В столбце множителя указывается, сколько штук содержится в упаковке продукта.
  3. Общее количество будет содержать сумму различных количеств запаса, которые у меня есть в (Таблице запасов продукта), а также будет суммироваться только количество для базовой единицы продукта.например: если базовая единица соды является пачкой, то она будет суммировать столбец (PackQTY) в (Таблице запасов продукта).и если он еще будет суммироваться (количество) в этой таблице.
                Product Stock Table
---------------------------------------------------------------------------------------------------------------------------
id ProdID UnitID  CustomBarcode  Quantity      PackQTY  CostPrice Price   PackCostPrice  PackPrice expDate        Enabled
  |------|-------|--------------|-------------|-------|----------|-------|--------------|---------|--------------|---------
1 |1     |   1   |              |     84      | 7     | 2.0      | 2.4   | 24.0         | 29      |  20/may/2019 |  1
2 |1     |   1   |              |     24      | 2     | 1.5      | 1.9   | 18.0         | 23      |  10/aug/2019 |  1
2 |2     |   3   |              |     50      | 0     | 3.0      | 5.0   | 0.0          | 0       |  10/Feb/2019 |  1

1. Включенный столбец будет работать как (булево), чтобы определить, использовать ли эту акцию при продаже.например: если бы я хотел продать банку с газировкой, у меня есть две акции для нее.если запас номер один равен 0, тогда столбец включения будет ложным, и поэтому он будет только вычитать количество, проданное из запаса номер два, и использовать его цену и себестоимость в (SalesDetails Table)

Пользовательский столбец штрих-кода будет использоваться для разделения акций при наличии скидки на акции с почти истекшим сроком годности.

И я также подумал о разделении различных единиц для каждого запаса продукта в (Таблица запасов)

Итак, когда я хочу продать 24 порции соды и 3 пачки соды, она выберет самую старую акцию в зависимости от ее (Enabled Column Value = True) и вычтет из нее это количество, а если оно достигнет нуля, то (Enabledcolumn) Значение изменится на false.

, после этого он снова пойдет и сделает то же самое, но на этот раз он изменит значение PackQtY с 7 на 4, и значение столбца количества будет вычислено через этот [Product_Stock]..Quantity = Product_Stock.Quantity - (значение столбца QtySold * Prodcut_info.Multiplier)], который будет равен 84- (3 * 12) = 48

. Выходная информация структуры продаж будет выглядеть следующим образом:

                Sale Details Table
----------------------------------------------------------
id ProdID UnitID    Quantity   CostPrice    Price   total  CostTotal
  |------|-------|-----------|-------------|-------|------|---------| 
1 |1     |   1   |    24     |     2.0     | 2.4   | 57.6 | 48.0    |
2 |1     |   2   |    3      |     18.0    | 23.0  | 69.0 | 54.0    |

                Product Stock Table (After Selling 24 pieces of Soda and 3 packs of Soda)
---------------------------------------------------------------------------------------------------------------------------
id ProdID UnitID  CustomBarcode  Quantity      PackQTY  CostPrice Price   PackCostPrice  PackPrice expDate        Enabled
  |------|-------|--------------|-------------|-------|----------|-------|--------------|---------|--------------|---------
1 |1     |   1   |              |     48      | 4     | 2.0      | 2.4   | 24.0         | 29      |  20/may/2019 |  1
2 |1     |   1   |              |     0       | 0     | 1.5      | 1.9   | 18.0         | 23      |  10/aug/2019 |  0

Извините, если я не очень хорошо объяснил.Заранее большое спасибо.

1 Ответ

1 голос
/ 05 мая 2019

Во-первых, вы должны быть осторожны с тем, как вы используете существительные. Например: «Цена» не означает то же самое, что «Стоимость», а «ЦенаЦены» звучит как оксюморон. Я советую вам ограничиться использованием стоимости или цены.

Ван Нг спрашивает, сделали ли вы диаграмму отношений сущностей. Что ж, на той стадии, на которой вы, кажется, находитесь, вероятно, было бы неразумно начинать с диаграммы ER, потому что диаграмма ER полезна как краткое изложение модели, которую вы уже определили - а вы еще не на этом этапе.

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

Я рекомендую вам рассмотреть возможность использования основанного на фактах метода моделирования под названием " моделирование ролей объектов " (ORM), потому что вы можете начать с "фактов", прежде чем думать о рисовании диаграмм ER.

Пример: Я использовал инструмент NORMA ORM для создания следующего примера:

Сначала я прочитал ваш текст, извлек факты и затем использовал факты для разработки модели объекта-роли. Затем я использовал инструмент NORMA, чтобы сгенерировать «логическое представление» модели объектной роли. (происходит в миллисекундах)

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

Пример содержит два артефакта:

1: логическая модель , сгенерированная инструментом NORMA.

2: факты, из которых была сгенерирована логическая модель.

[The automatically generated logical model[2]

The facts from which the logical model was generated

...