2013-08-06 34 views
0

這是關於設計與現有客戶的服務機器相關的數據模型的最佳實踐和優化問題。服務修復跟蹤的數據庫設計

場景: 的員工或他們的2 訪問一個客戶做在一個或多個機器修理(或其他類型)的服務。我也想指定開車的員工給客戶。 我也想捕捉哪個員工在哪臺機器上工作。 目前,該公司使用一張服務卡來獲取每次訪問多臺機器的維修服務。

我在想,每臺機器每次訪問必須有自己獨立的服務卡。這意味着訪問可以包括許多服務,並且每項服務僅與一臺機器相關。每項服務都可以由一名或多名員工執行。但爲了抓住誰開車到訪:每次訪問都是由一個或多個員工完成的。

恐怕訪問 - 員工 - 服務與員工數據之間存在冗餘。

您的建議非常感謝。我相信有更多的方法來做到這一點。

感謝

回答

0

這聽起來像你對我可能有以下表

Employee 
- eid (pk) 
- . . . 

Machine 
- mid (pk) 
- . . . 

ServiceCall 
- sid (pk) 
- driver_eid(fk to Employee.eid) 
- . . . 

ServiceCall_Machine_Employee_Map 
- sid (fk to ServiceCall.sid) 
- mid (fk to Machine.mid) 
- eid (fk to Employee.eid) 
- . . . 
+0

爲什麼你認爲最好讓它成多對多,而不是每臺機器都有一張服務卡? – blaise

1

你需要記錄的數據和存儲數據之間的區別。

從需要填寫服務卡的人員的角度來看,每次訪問一張服務卡更加高效。

關係數據庫需要將該數據存儲在normalized表單中。

在數據庫方面,服務卡可以(應該)高度非規範化。

這是我對數據庫模式的嘗試。

Client 
------ 
Client ID 
Client Name 
... 

Employee 
-------- 
Employee ID 
Employee Name 
... 

Machine 
------- 
Machine ID 
Machine Name 
... 

Service 
------- 
Service ID 
Service Name 
... 

Client Visit 
------------ 
Client Visit ID 
Client ID 
Visit Date or Visit Time stamp 
... 

Client Visit Employee 
--------------------- 
Client Visit Employee ID 
Client Visit ID 
Employee ID 
Driver Boolean 

Client Visit Service 
-------------------- 
Client Visit Service ID 
Client Visit ID 
Employee ID 
Machine ID 
Service ID 
+0

如果我將machine_id作爲外鍵放入服務表中,並將其從「客戶端訪問服務」表中刪除,該怎麼辦? – blaise

+0

該服務是一項通用服務,如「潤滑機器」。您在Service表中列出所有服務一次。客戶訪問服務將一般服務與特定機器和特定客戶訪問聯繫起來。 –

+0

基本上,您希望技術人員從一般服務列表中進行選擇以滿足客戶訪問服務的信息。對? – blaise