【问题标题】:Creating a simple(but not for me) db创建一个简单的(但不适合我)数据库
【发布时间】:2011-07-04 12:43:25
【问题描述】:

我正在尝试建立一个数据库来跟踪小型 craigslist 销售操作中的情况。

基本上这些家伙的运作方式是这样的。

  1. 假设有人以每本 10 美元的价格购买 3 本书。

  2. 他们将其发布在 CL 上

  3. 他们以 20 美元的价格出售。

  4. 购买者每售出一本书可获得 10 美元的返还,外加 1/3 的利润。

问题是他们几乎每次都在购买同一本书,但他们购买的价格却在变化。有时,他们以 12 美元购买这本书,另外 15 美元。如果市场对他们有利,他们会购买其他书籍。

我想做的是建立和库存清单,通过书名和购买价格来跟踪书籍。

因此,如果我们有 10 本书“绿色鸡蛋和火腿”书籍,每本 10 美元,我们有 5 本书“绿色鸡蛋和火腿”书籍,价格为 15 美元。库存清单应反映两个单独的项目。这是为了让投资者为他的投资获得适当的报酬。

我无法以这种方式设计数据库。我有以下表格:

产品

  • ID PK
  • 姓名
  • 说明

库存

  • 身份证
  • 购买日期
  • Product_ID PK
  • Purchase_Price PK
  • 数量

采购

  • ID PK
  • Product_ID
  • 产品_数量
  • Purchase_Price

到目前为止,我的推理建议我应该在产品表中跟踪他们正在销售的类型项目。还要跟踪他们何时购买一件物品,以及在给定时间购买了多少件物品;因此采购表。然后我想建立一个我在库存中的清单,但每条记录都需要根据项目及其成本是唯一的。所以我决定我将使用购买价格和产品 ID 的复合键来做到这一点。

如果字段不是主键,是否可以使用将采购价格和采购表中的产品 ID 关联到我的库存表?到目前为止,我的方法是否适合我想要完成的工作?有没有更好的方法来做我想做的事情。

数据库中还有其他元素我没有提到,但如果有必要的话会提到

感谢所有可以帮助我的人。

【问题讨论】:

    标签: database-design ms-access relational-database


    【解决方案1】:

    产品

    • ID PK
    • 产品名称
    • 说明

    购买

    • ID PK
    • 产品ID FK
    • 购买日期
    • 数量
    • 采购价格

    销售

    • ID PK
    • 产品ID FK
    • 销售日期
    • 数量
    • 销售价格

    库存

    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
    

    上述查询的作用是从 Product 表中返回 ID 和 ProductName,并计算该商品的库存数量。第一个子查询(SELECT Sum(Quantity) FROM Purchase WHERE ProductID=Product.ID) 返回已购买的所有匹配项目的总和。然后,它会从总数中减去所有已售出的匹配商品的总和 (SELECT Sum(Quantity) FROM Sale WHERE ProductID=Product.ID),以得出库存商品。

    要获得以 100 美元购买的 iPad 数量,您可以使用如下查询:

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

    要获得特定项目的利润,在查询中执行所有操作会有点麻烦,但在代码中执行会很简单。

    【讨论】:

    • 所以我不需要库存关系?你说的是库存视图吗?
    • 没错。如果您跟踪您的采购和销售情况,那么差异就是您的现有库存。
    • 你能解释一下这个sql语句吗,我很新鲜。
    • 问题是我需要根据每件商品的价格来盘点。我需要能够提取我以 100 美元的价格购买的“ipad”的数量
    • 您不需要库存,因为它来自运动。您也不需要单独的购买和销售表格。一张表就足够了,数量的符号就可以了:+ 代表 IN,- 代表 OUT。只需将按 Ref 分组的运动相加,您就有了库存。
    【解决方案2】:

    那么,在产品进入库存之前,它应该是购买的吗?只需在 Inventory 表中使用 PurchasingID 作为外键 - 这将消除在两个表中使用 purchase_price 的需要。
    编辑:
    它会是这样的:
    产品
    身份证PK
    名称
    说明

    库存
    身份证PK
    购买日期
    数量
    Purchasing_ID FK

    采购
    身份证PK
    产品_ID FK
    产品_质量
    购买价格

    根据您的需要,您可能需要在采购和库存之间增加一个表格

    【讨论】:

    • 是的,但我不确定如何设计另一个表,以及它应该如何与数据库的其余部分交互。
    【解决方案3】:

    1 个表格用于产品,1 个表格用于移动(销售和采购)。这样,您的库存将非常容易。如果数量很大(假设一年超过 50.000 次),您可能需要查看this interesting study

    【讨论】:

      猜你喜欢
      • 2012-02-04
      • 1970-01-01
      • 1970-01-01
      • 2016-07-31
      • 1970-01-01
      • 1970-01-01
      • 2019-04-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多