数据库设计 - 我这里有冗余吗?

时间:2011-05-06 05:57:13

标签: sql anti-patterns

我有四个表:公司,产品,客户和销售。它们的关系如下:

  • 一家公司可以拥有多种产品
  • 一家公司可以拥有多个客户
  • 销售是产品和客户的子女。每个销售记录都可以返回一个产品和一个客户。

我对您可以通过两条不同路线从销售回溯到公司这一事实感到不安。这增加了数据完整性问题的可能性 - 如果产品路线说最终父母是公司A,而客户路线说它是公司B,会怎样?

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

谢谢!

1 个答案:

答案 0 :(得分:2)

这取决于。你说:

  

一家公司可以拥有多家公司   客户

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

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

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

但是,如果关系是Company 注册的Customer,则情况会有所不同。

在这种情况下,如果Products买方和Company Customer“属于”之间存在冲突,那么这不是真正的冲突 - 冲突将发生在Company Customer 已注册,以及Company 购买的Customer,即不真正的冲突。

最终的问题是,CustomerCompany之间的关系是什么 - 它是Customer

的位置
  • 上次购物(多余)
  • 通常是商店(多余的)
  • 首次购物(多余)
  • 已注册(可能不是多余的)