【问题标题】:Data in one table affects another一个表中的数据会影响另一个表
【发布时间】:2018-02-27 20:36:19
【问题描述】:

我正在尝试为一家从事销售、租赁和提供支持的科技公司创建一个关系数据库。我必须为每一个存储数据,但他们销售的商品有可能是基于硬件或软件的。这意味着对于与硬件相关的销售,必须存储送货地址,而软件则不需要。

到目前为止,我已经尝试在概念上对此进行建模,并决定使用“销售”、“租赁”和“支持”表。然后链接到这个,我有“产品”,它将有一个 id 和通用产品信息,链接到单独的“硬件”和“软件”表。

部分概念模型

我担心的是,如果产品是基于硬件的,那么 sales/leasing/support 表的属性需要不同才能允许输入地址。

这让我一直不知道如何为这部分建模,我非常感谢任何人提供的任何意见。

提前致谢!

【问题讨论】:

  • 这是模糊的。此外,它或多或少只是一堆没有关系/关联的实体。 “相关”和“链接”不是有用的术语。一张表代表一些实体/值的关系/关联;当参与者还必须在其他地方参与时,FK 表示该事实/约束(“关系”/“链接”)。您使用的是什么信息建模和数据库设计参考?请给出一个适当的 ERD 或 DDL,尽管它可能不是最优的,但实际上记录了您想要的数据中存在足够问题的部分。然后我们可以谈谈改造它。

标签: database entities relational


【解决方案1】:

我认为您想进一步研究规范化,看看这是否能回答您的问题。我认为您应该专注于一个问题点,并通过数据/解释/ERD真正扩展它,向我们展示哪些数据在哪些场景下可用。

让我对你所说的进行一些假设:

这意味着对于与硬件相关的销售,必须存储送货地址,而软件则不需要。

假设产品已售出。 “Sale”是一个持有诸如

等信息的实体
  • 销售日期
  • 售价
  • 数量

然后,如果产品是硬件软件,则会存储额外的数据。假设您只存储 硬件 的额外详细信息 - 即送货地址:

  • 收货地址(仅为硬件销售存储)

所以听起来“Sale_Hardware”是“Sale”的子实体。

PRODUCT ---> SALE(一种产品可以有很多销售,但一种销售只能有一种产品)- 请参阅下面的注释。

SALE ----- SALE_HARDWARE(这是一对一的关系,SALE_HARDWARE 将只包含一些基于硬件的 SALE 的数据)。

--

注意:这是一个非常简单的示例。上面我提到了 PRODUCT ---> SALE(一对多),但实际上这不是真的。一次销售可以包含许多产品。这就是为什么 SALE 或 ORDER 通常分为 ORDER_ITEM 并且每个 ORDER_ITEM 包含一个 PRODUCT。

希望这是有道理的,我希望这涉及到如何使用规范化来设计您的数据库。如果您有任何问题,或者如果您想更改您的问题以关注您想要进一步规范化的特定几个实体,请告诉我。

【讨论】:

    【解决方案2】:

    它缺少很多细节,但我会选择类似的东西。显然你需要填补空白!

    所以你得到一个产品表,一个客户表。硬件 - 软件并不重要,但如果必须,请在您的产品中添加一个类型列。

    一条线是一种有数量的产品。订单是一组组合在一起的行。再说一次,租约也是一组组合在一起的行,但附加条件然后是销售。

    Product
        Productid
        ProductName
        Price
        ToShip: boolean, can this product be shipped or not?
        ....
    Customer
        Customerid
        Firstname
        Lastname
        ShippingAddress
        BillingAddress
        Phone
        ...
    

    Order
        Orderid
        Buyer: FK to Customer.Customerid
        ShippingAddress: boolean, true == use address from Customer
                                  false == use address here
        ShiptoAddress
        Shipped
        TrackingNumber
    Line
        Lineid
        Productid: FK to Product.Productid
        Quantity
        DiscountPercentage
    Order <-> Line
        Orderid: FK to Order.Orderid
        Lineid: FK to Line.Lineid
    

    Lease
        Leaseid
        Leaser: FK to Customer.Customerid
        Terms
        ...
    Lease <-> Line
        Leaseid: FK to Lease.Leaseid
        Lineid: FK to Line.Lineid
    

    Support: support contract
        Supportid
        Term
        SuportLevel
        ...
    Support <-> Line
        Supportid: FK to Support.Supportid
        Lineid: FK to Line.Lineid
    

    Lease 可以链接到另一个指定 LeaseType(标准条件、租赁协议等)的表。支持类似的东西。

    这允许购买、租赁或支持相同的产品。

    只是想法,按需调整。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-11
      • 1970-01-01
      • 2016-11-11
      • 2016-05-09
      • 2018-04-05
      • 2019-10-25
      • 1970-01-01
      相关资源
      最近更新 更多