【问题标题】:Database entity model design with circular relationships具有循环关系的数据库实体模型设计
【发布时间】:2016-05-22 11:20:42
【问题描述】:

我正在设计一个数据库实体模型。我想避免循环关系,但我不确定在以下情况下如何做:

该系统用于跟踪开发人员的任务和客户的购买。每个产品都有一种且只有一种相关的技术和一定数量的时间。客户可以购买不同种类的产品。一项任务关联一种且只有一种技术。

这些关系很重要,因为在提交数据后,我希望能够查询客户在某些技术上使用的时间是否超过了他购买的时间,或者相反,如果他购买了他所使用的另一种技术的时间不使用。另外我想询问开发人员如何在不同的技术中占用他们的时间,或者哪些技术与开发人员相关联。

这是我的设计,但我认为循环关系是我应该避免的,我应该找到其他方法来解决它。

解决这个问题的标准方法应该是什么?


根据 Alex 的建议,这将是新图表

【问题讨论】:

  • 你能更详细地描述“任务”吗?我原以为“任务”会直接与产品相关联。
  • 什么循环关系?
  • @Alex 感谢您的评论。任务将是开发人员在一段时间内工作的事情。例如,假设一个客户有 2 个系统,一个带有 ruby​​ 堆栈,另一个带有 java 堆栈,如果开发人员在一个系统上工作 4 小时,在另一个系统上工作 4 小时,他将有两个任务,每个系统一个。我面临的问题是,开发人员的工作可能与销售的产品不匹配,也许需要在一种技术上工作更多,而不是在另一种技术上工作。该模型的目的之一是突出这种情况。
  • @philipxy 感谢您的评论。也许我错了,但我认为任务、客户、购买、产品和技术之间存在循环关系。
  • 你认为循环关系是什么,为什么你认为你必须避免它们?

标签: sql database-design


【解决方案1】:

目前您的逻辑不允许将特定采购订单或产品链接到任务。

我建议:

开发者 |-- 8 个任务 8-- 购买
客户 |-- 8 购买 8--|产品 8--|技术

假设:

  • 贵公司有一个产品目录,客户可以从中选择购买特定产品。
  • 每个产品都分配有一定数量的开发时间(products.hours 字段)。
  • 然后分配开发人员来满足采购需求(产品定制等),这些需求被拆分为任务。记录在任务上花费的小时数。

报告要求清单:

您可以找到为每个购买的产品和技术客户分配的开发时间。

SELECT *
FROM Purchases
    JOIN Products
        JOIN Technologies
WHERE client_id = 'customer'

您可以了解在每种产品和相关技术上花费了多少小时。

SELECT *
FROM Tasks
    JOIN Purchases
        JOIN Products
            JOIN Technologies
WHERE client_id = 'customer'

通过将任务与购买相关联,您将能够了解客户正在使用哪些产品/技术以及哪些特定产品创建了哪些任务。

如果开发人员需要开发与特定客户无关的产品/技术,您应该能够将自己的公司添加到客户列表中,并为其分配采购订单/任务并通过这种方式跟踪开发时间。

请注意,以上内容基于我对可能更大的需求范围的有限理解。如果您决定遵循我的建议,请检查它是否满足所有其他申请/报告要求。

【讨论】:

  • 谢谢@Alex,你是对的,这就是我要找的。​​span>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-10
  • 2014-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多