2016-05-19 145 views
0

我正在設計數據庫實體模型。我想避免循環關係,但我不知道如何在以下情況下執行此操作:具有循環關係的數據庫實體模型設計

該系統用於跟蹤開發人員任務和客戶購買。每種產品都有一種且只有一種相關的技術和數小時。客戶可以購買不同種類的產品。一項任務只有一項相關的技術。

這些關係非常重要,因爲在提交數據後,我希望能夠查詢客戶是否在某些技術上使用的時間超過了他購買的小時數,或者在相反的一面,如果他用另一種技術沒有使用。另外我想查詢開發人員如何在不同技術中佔用他們的時間,或者哪些技術與開發人員相關聯。

這是我的設計,但我認爲循環關係是我應該避免的,我應該找到其他解決方法。

enter image description here

這應該是解決這一標準呢?


隨着亞歷克斯的建議,這將是新圖

enter image description here

+0

你能更詳細地描述「任務」嗎?我會認爲「任務」會直接與產品相關聯。 – Alex

+1

什麼循環關係? – philipxy

+0

@Alex感謝您的評論。任務將是開發人員在一段時間內進行的工作。例如,假設一個客戶端有兩個系統,一個使用紅寶石棧,另一個使用java棧,如果開發人員在一個系統中工作4個小時,在另一個系統中工作4個小時,他會有兩個任務,每個系統一個。我面臨的問題是,可能發生的情況是,開發人員的工作可能與所銷售的產品不匹配,也許需要使用一種技術而不是另一種技術。這種模式的目的之一是強調這種情況。 – agusgambina

回答

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' 

通過鏈接任務來購買,你將能夠找出作爲具體的產品產生什麼任務產品/技術,客戶使用爲好。

如果開發人員需要處理未與特定客戶關聯的產品/技術,則應該能夠將自己的公司添加到客戶列表中,並向其分配採購訂單/任務並以此方式跟蹤開發時間。

請注意,以上是基於我有限的承諾,可能是一個更大的需求範圍。如果您決定遵循我的建議檢查它是否符合所有其他申請/報告要求。

+0

謝謝@亞歷克斯你是對的,這就是我一直在尋找的。 – agusgambina