【问题标题】:Best way to store product size/quanties in a database?在数据库中存储产品尺寸/数量的最佳方式?
【发布时间】:2009-07-07 13:45:28
【问题描述】:

我正在建立一个定制商店,我们在座的人都无法达成一致意见,那就是我们应该如何存储产品的尺寸/数量字段。我很容易找不到这方面的信息,我想知道人们以前是如何解决这个问题的?

目前,我们正在考虑将完整的尺寸/数量信息存储在一个字段中的每个产品的 JSON 等内容中,或者创建一个可变大小的键/值列表,然后将其绑定到产品。

您选择哪种方式存储此信息?

【问题讨论】:

    标签: database-design


    【解决方案1】:

    有几种方法可以解决这个问题,每种方法都增加了复杂性:

    不要存储单位信息:

    项目记录可以存储在描述中。

    物品表:

    ID | Description       
    ---+---------------------------------
    09 | Red Sox Tee Shirt (Case of 12)
    10 | Red Sox Tee Shirt (each)
    11 | 500lb Nylon Rope  (per foot)
    

    然后在订单表上,您只需要存储一个Item ID + Quantity,其中数量是十进制值。

    将单位存储为项目的一部分

    Description       | Unit | UnitPrice    
    ------------------+------+----------
    Red Sox Tee Shirt | Case |     45.00
    500lb Nylon Rope  | Foot |      0.25
    

    然后在订单表上,您只需要存储一个Item ID + Quantity,其中数量是十进制值。

    将可换算单位存储为 Item 的相关子表

    物品表:

    ID | Description       
    ---+----------------
    10 | Red Sox Tee Shirt 
    11 | 500lb Nylon Rope  
    

    Item_Unit 表

    ID | Unit   | UnitPrice
    ---+--------+----------
    10 | Each   |      6.00
    10 | Case12 |     60.00
    11 | Foot   |      0.25
    11 | Spool  |    250.00
    

    在这种情况下,订单记录需要有Item ID + Unit + Quantity

    最灵活和最复杂的——可转换单位

    这将是最后一种形式的扩展,但是您有一个“单位”表,用于存储单位、单位类型(长度、体积等)以及它们与通用单位的关系。例如,这样您实际上可以从一个单位转换为另一个单位(1000 英尺 == 1 个线轴)。

    但您不太可能需要这种复杂程度。

    【讨论】:

    • 非常感谢您的所有建议。我们拥有的特定设置非常类似于服装店,所以我们的单位实际上只会是“1”。例如,我们有一件 T 恤,有 2 个中号,3 个 xl 和 4 个小号。我正在考虑拥有 item 表,然后是另一个 item_sizes 表,其中每个数量/尺寸对都有一个条目。再说一次,将项目的整个大小/数量列表存储为 JSON 数组(所以我会进行查询,然后在我的逻辑中将其“扩展”到大小/数量数组中)感觉会更快,并且可能更容易工作,但感觉不干净。
    【解决方案2】:

    传统的方法是有一个单位查找表,例如“oz”,结合一个非整数的数量。

    【讨论】:

      【解决方案3】:

      我假设您的产品可以有多个不可计算的尺寸/数量。

      例如 包,12 盒子,22

      如果您在数据库中执行此操作,那么当前的想法是您需要规范化并创建一个新表,其中包含指向产品 (product_ID) 的链接、尺寸和数量。这就是我要做的,但我用一种没有 JSON 或键/值对的语言进行编程。

      但是 - 我认为您选择的解决方案很大程度上取决于您将如何处理应用程序中的大小/数量值。这些只是简单地显示,还是可能会被用于其他目的?另外 - 是否有默认尺寸/数量?

      【讨论】:

        【解决方案4】:

        我总是尽可能使用整数。例如。 100mm 而不是 0.10m,因为在计算浮点数时可能会有微小的误差。

        【讨论】:

          猜你喜欢
          • 2020-11-18
          • 1970-01-01
          • 2014-02-12
          • 1970-01-01
          • 2012-07-27
          • 2011-11-26
          • 1970-01-01
          • 2018-03-16
          • 1970-01-01
          相关资源
          最近更新 更多