2016-01-20 186 views
2

我试图为以下实体设计数据库模式:商店,产品,折扣和买家。目标是为几款产品提供折扣活动。然而,我在数据库架构,我可以看到第一次迭代有如图所示波纹管的循环依赖关系:SQL循环依赖关系

enter image description here

的问题是:是有这种依赖不好的SQL设计?另外,如何将买方的实体包括在内,以代表参考产品和所使用的折扣?谢谢。

+2

'Stores'和'Discounts'之间的关系是什么? – eggyal

+0

根据您的设计,多种折扣可适用于同一产品。它很好吗?如何选择一个折扣(或计算)?可能只是一列DiscountId(可为空)应添加到产品表中。此外,我会使产品商店多tomany但实际上设计很好(恕我直言)。 – StanislavL

+0

@eggyal商店1 - M折扣 – alexsc

回答

1

我没有在你的模型中看到这样的“循环依赖”。将其视为一个定向(或定向)图。从一个实体开始并返回它不可能是顺时针也不是逆时针。

+0

那么你会发现该图是适合的? – alexsc

+0

@alexsc是的,我不认为这个模型会打破你的应用程序 – mauro

1

我没有ERD的软件,但我会做这样的事情: sample store erd

或者:

enter image description here

+0

这是有道理的。库存表将包含所有曾经库存的产品,以及产品是否仍然可用的指标以及产品在特定时间点的折扣。 –

+0

尝试将折扣设想为折扣广告系列,其中一个产品可以是多个广告系列的主题..我不认为此图表支持此用例。 – alexsc

+0

@alexsc我想我明白你在说什么。我认为这可以通过添加另一个桥接表来解决。 – Santiago

0

没有循环引用,这是不会被定义为不正确的:例如具有部门外部关键字的员工(员工工作)和部门之间的外部关键字(由管理人员)。

的设计缺陷,我确实看到:该模型能够从一个店的折扣从商店B.产品

如果你想避免这种情况,你可以添加STOREID到主(或备用唯一键)的产品和折扣中,将该列添加到Product_Discounts并使其成为两个外键的一部分。

至于合并买方:您需要创建买方,销售和销售物品表。

  • 买家代表谁取得了零的一个或多个买家...
  • 销售:代表其中一个买家买了零(不太可能)的事件,一个或更多...
  • Sales_Items代表在销售同一产品的零个,一个或多个项目

最后,你需要一个Sales_Items_ Products_Discount表,用于存储应用于销售项目的产品折扣。

+0

标题外壳/复数表名称让宝宝耶稣哭了。 –

+1

命名风格有很多不同的偏好,我认为这不是你的。实际上,它不是我的,但我试图保持与问题中使用的相同的风格,因为我认为混合风格是最糟糕的风格。 –

+0

或者,制定一些标准并随时间治愈结构。游泳池可能很脏,但如果你没有开始清洁它,它总是很脏。 –