Создание простой (но не для меня) БД - PullRequest
0 голосов
/ 25 февраля 2011

Я пытаюсь создать базу данных для отслеживания событий в рамках небольшой операции по продаже Craigslist.

В основном, как работают парни, так и есть.

  1. кто-то покупает, скажем, 3 книги по цене $ 10 каждая.

  2. Они публикуют его на CL

  3. И они продают его за 20 долларов.

  4. Покупатель получает обратно 10 долларов США за каждую проданную книгу, плюс 1/3 прибыли.

Проблема в том, что они каждый раз покупают одну и ту же книгу, но цена, которую они покупают, меняется. Иногда они покупают книгу за 12 долларов, а за другие 15 долларов. Они будут покупать другие книги, если рынок на них хорош.

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

Итак, если у нас есть 10 книг "Зеленые яйца и ветчина", это стоит 10 долларов за штуку, и у нас есть 5 книг "Зеленое яйцо и ветчина", которые стоят 15 долларов. инвентарный список должен отражать два отдельных предмета. Это сделано для того, чтобы инвестору платили надлежащим образом за его инвестиции.

У меня проблемы с переназначением БД таким способом. У меня есть следующие таблицы:

Продукт

  • ID PK
  • Имя
  • Описание

Inventory

  • Дата покупки
  • Product_ID PK
  • Покупка_Цена ПК
  • Количество

Приобретение

  • ID PK
  • PRODUCT_ID
  • Product_Quanity
  • Purchase_Price

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

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

есть другие элементы в БД, которые я не упомянул, но будут, если они необходимы

Спасибо всем, кто может мне помочь.

Ответы [ 3 ]

1 голос
/ 25 февраля 2011

Продукт

  • ID PK
  • ProductName
  • Описание

Покупка

  • ID PK
  • ProductID FK
  • PurchDate
  • Количество
  • PurchPrice

продажа

  • ID PK
  • ProductID FK
  • SaleDate
  • Количество
  • SalePrice

Inventory

SELECT ID, ProductName, 
       (SELECT Sum(Quantity) FROM Purchase WHERE ProductID=Product.ID) -
       (SELECT Sum(Quantity) FROM Sale WHERE ProductID=Product.ID) AS NumInStock
FROM Product

То, что делает вышеупомянутый запрос, возвращает ID и ProductName из таблицы Product, а также вычисляет количество этого товара на складе. Первый подзапрос (SELECT Sum(Quantity) FROM Purchase WHERE ProductID=Product.ID) возвращает сумму всех соответствующих предметов, которые были приобретены. Затем из этой общей суммы вычитается сумма всех подходящих предметов, которые были проданы (SELECT Sum(Quantity) FROM Sale WHERE ProductID=Product.ID), чтобы найти то, что есть в наличии.

Чтобы узнать количество iPad, купленных за 100 долларов, вы можете использовать запрос, подобный следующему:

SELECT Sum(Quantity) AS NumiPadsFor100
FROM Purchase WHERE PurchPrice = 100

Чтобы получить прибыль от определенного элемента, было бы немного более громоздким делать все в запросах, но это было бы просто сделать в коде.

0 голосов
/ 26 февраля 2011

1 стол для продуктов и 1 стол для движений (как продажи, так и покупки). Таким образом, ваш инвентарь будет очень легко. Если у вас большие объемы (скажем, более 50 000 движений в год), вы можете посмотреть это интересное исследование .

0 голосов
/ 25 февраля 2011

Итак, прежде чем товар поступит в инвентарь, его следует приобрести, верно? Просто используйте ID покупки в качестве внешнего ключа в таблице инвентаризации - это избавит от необходимости использовать purchase_price в обеих таблицах.
EDIT:
Это будет так:
Продукт
ID PK
Имя
Описание

Inventory
ID PK
Дата покупки
Количество
Закупка_ID ФК

Приобретение
ID PK
Product_ID FK
Product_Quanity
Цена покупки

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

...