【问题标题】:Database design - Do I have redundancy here?数据库设计——我这里有冗余吗?
【发布时间】:2011-08-19 22:11:07
【问题描述】:

我有四个表:Company、Products、Customers 和 Sales。它们的关系如下:

  • 一个公司可以有多个产品
  • 一个公司可以有多个客户
  • 销售是产品和客户的子代。每条销售记录都指向一个产品和一个客户。

我感到不安的是,您可以通过两条不同的路线从销售追溯到公司。这引发了数据完整性问题的可能性 - 如果 Products 路线说最终母公司是 A 公司,而 Customer 路线说它是公司 B,该怎么办?

对我来说,这听起来像是一种 SQL 反模式,但我可能是错的。我该怎么办?

谢谢!

【问题讨论】:

    标签: sql anti-patterns


    【解决方案1】:

    这取决于。你说:

    一个公司可以有多个 客户

    这是否意味着每个Customer 只在一个Company 购物?

    如果不是,CustomerCompany 之间的关系不应该由他们购买的Products 定义吗?

    这意味着删除Customer 上的fk_Company 字段(或等效字段)。

    但是,如果关系是 Customer注册的 Company,则不同。

    在这种情况下,如果购买的 ProductsCompanyCustomer “属于”之间存在冲突,则不是真正的冲突 - 冲突将在 Company 和 @ 之间987654334@注册,和Customer 购买的Company只是,即不是真正的冲突。

    最终的问题是,CustomerCompany 之间的关系是什么 - Customer 是否在哪里?

    • 上次购物(冗余)
    • 通常是商店(冗余)
    • 第一次购物(冗余)
    • 已注册(也许不是多余的)

    【讨论】:

    • 感谢 Graphain。我可以看到这一切都在上下文中!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-21
    • 2014-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多