【问题标题】:Generalization+prices history概括+价格历史
【发布时间】:2013-03-09 18:51:54
【问题描述】:

假设我有一个由 3 个主要项目组成的产品。产品为笔记本电脑,项目为: 螺丝(ID、代码、描述) 按钮(ID、代码、描述) 覆盖范围(id、代码、描述、颜色)。

每台笔记本电脑都由这些项目的任意组合组成。

  1. 我可以把所有的“材料”放在一个表中,并添加一个名为“类型”的属性来区分每个项目,但是会有很多行的“颜色”值是空的。

    我想到了专业化: 材料(id、代码、描述),然后都是它的子类。但是按钮和螺丝类与母类没有什么不同。

    那么你的想法是什么?

  2. 我想添加单价属性。我需要实际价格,并且我想每月保留旧价格的历史记录(即每个价格都绑定到 MM/YYYY)。

    我可以创建一个价格表:

    prices (id, price, date)
    

    但是我应该在材料表中保留实际价格=当前价格还是只在价格表中保留?

【问题讨论】:

    标签: database database-design entity-relationship


    【解决方案1】:
    /* keep your general product specs here: */
    PRODUCT
    id primary key
    type
    code
    description
    standard_price
    
    
    /* or add a subtype table for some of them: */
    COVERAGE_PRODUCT
    id pk fk PRODUCT
    colour 
    
    
    /* products are composed of other products: */
    PRODUCT_STRUCTURE
    part_of not null references product(id),
    composed_of not null references product(id)
    primary key (part_of, composed_of)
    

    您可以将历史定价保存在数据仓库中,或添加 product_price 表。在这种情况下,请从产品中删除“standard_price”。

    PRODUCT_PRICE
    product_id fk product(id)
    from_date
    price
    to_date (nullable)
    primary key (product_id, from_date)
    

    【讨论】:

    • 感谢您的帮助 1. 您添加了一个名为“type”的新属性(我认为它可以是螺丝、按钮或覆盖范围)。这不应该放在自己的桌子上吗? 2. 为什么我们需要 /* 产品由其他产品组成:*/ PRODUCT_STRUCTURE?
    • 取决于你是想使用单表继承(使用空值但更简单)还是类表继承(没有空值,但更复杂)。一个产品可以由其他产品组成。例如,滑板由板、卡车和轮子组成。在某些情况下,它是一个网络结构,而不是层次结构,因此是该表的设计。
    • 那么表中的某些属性可以有几个空值吗?
    • 这取决于你。这是无所不知的 Martin Fowler 推荐的方法。
    猜你喜欢
    • 2011-03-23
    • 1970-01-01
    • 2016-06-30
    • 2017-08-19
    • 1970-01-01
    • 1970-01-01
    • 2023-01-13
    • 2021-07-13
    • 2019-09-16
    相关资源
    最近更新 更多