我正在創建數據庫,我需要一些設計幫助。使用查找數據進行數據庫設計
我的表看起來就像這樣:
id
request_employee_id
request_menu
request_submenu
request_qty
send_employee_id
notify_employee_id
每個請求有一個添加更多的選擇。例如:
請求菜單
id - 1 | Desc - Pencil
id - 2 | Desc - Pen
id - 3 | Desc - Eraser
id - 4 | Desc - Marker
根據所選的請求菜單會有不同的子菜單選項。
請求子菜單
id - 1 | Desc - Yellow HB
id - 1 | Desc - Black HC
id - 2 | Desc - Blue Ink
id - 2 | Desc - Black Ink
id - 2 | Desc - Red Ink
id - 3 | Desc - NULL
etc...
請求者可以從子菜單主菜單和黃HB選擇鉛筆,然後可以在主無子菜單橡皮擦添加其他請求並選擇更多不同的要求。
請求者可以選擇發送給員工的X,並添加更多的員工送樣也發送給員工的Y和員工W.
請求者可以通知員工Z關於請求,並添加更多的員工通知員工ŧ和員工Y.
問題我基本上是如果我必須使用規範化和如何處理。我在考慮如何獲取報告的數據。
如果用戶發佈帶有多個菜單和子菜單的請求,多個用戶發送用戶和不同的通知用戶,如果我有規範化,我將不得不使用大量的JOINS語句,數據將由有多少用戶和我會得到的菜單。
或者使用倍數單獨的數據庫連接來獲取:從每個請求,通過請求另一個連接和查詢所有send_employee,通過請求notify_employee另一個連接所有菜單。最後,我將擁有7個不同的連接和SQL select語句來報告一個請求。
注:本人簡歷表,我也請求將落在同樣的問題,該員工有計量單位。每個請求可以通過菜單具有多個UOM。 Eaches,Bag,Cases等
如何處理這種情況的最佳設計。
謝謝
你應該解釋一下你爲什麼選擇這種設計。 – Laurel
嗨,斯拉瓦,謝謝你的回答。然後,當我將報告可視化時,我將針對用戶請求進行多次加入,發送用戶並通知用戶這將是員工表的3次加入。是對的嗎 ? – user3216926
這是正確的。這似乎效率低下,但規範化顯着減少了數據量,這減少了獲取這些數據的I/O量。而且,如你所知,I/O比CPU更昂貴。這意味着你的報告將更快。但是,如果您只想從中做報告,那麼您可以創建一個包含「請求詳細信息」表的數據倉庫作爲事實表和請求,類別,項目,僱員作爲維度。 –