2010-10-21 34 views
0

我正在構建一個Web應用程序,並且我剛收到客戶端在電子表格中的一些基礎數據。我需要以有意義的方式將數據導入MySQL數據庫,以便稍後有效地查詢它。最有意義的是什麼?這裏的細節:關於構建或規範我的MySQL數據所需的建議

有部門,類*編輯(類是男士T恤,女士牛仔褲等產品類型)和供應商(和產品最終...)。 25個部門,300個班級和3300個供應商。在某些情況下,部門共享課程以及供應商。

我的web應用程序將有部門頁面,這些頁面將顯示供應商的列表,該列表中的產品出現在所選部門中,並鏈接到供應商特定頁面。供應商頁面將按類別列出他們的產品。

我可以設置3或4個表格,但是當我構建我的應用程序時,這會導致格式良好的高效查詢嗎?此外,這將使一個規範化的數據庫,避免更新,刪除異常?

這實際上可能更多的是如何選擇我的數據而不是如何構建我的數據庫的問題,但我想我會從結構開始並轉到查詢優化。

+0

因此,類是產品的類別? – Stephen 2010-10-21 17:59:23

+0

@Stephen,對不起。是的,班級是男士靴子,男士工作靴,女士時尚靴等產品的類型... – Ofeargall 2010-10-21 20:36:49

回答

1

如果我認爲正確的類是類別的產品,並且產品可以屬於一個類:

​​

如果產品可以屬於多個類,降class_id列,創建一個名爲新表classes_products

假設上述結構,這裏是一個示例查詢。

獲取一個部門,該部門的類別和產品,爲這些類:

SELECT departments.id AS DepartmentId, 
      departments.name AS DepartmentName, 
      classes.id  AS ClassId, 
      classes.name  AS ClassName, 
      products.id  AS ProductId, 
      products.name AS ProductName 
FROM  departments 
LEFT JOIN classes_departments 
     ON classes_departments.department_id = departments.id 
LEFT JOIN classes 
     ON classes.id = classes_departments.class_id 
LEFT JOIN products 
     ON products.class_id = classes.id 
WHERE  departments.id = ## 

的最好的辦法讓誰賣的產品從一個部門一類供應商的名單將是使被稱爲另一個表classes_vendors

+0

這建議創建7個表格,對嗎?這是數據可伸縮性和規範化的最佳選擇嗎?我足夠新的關係數據,我真的不知道。我只是想盡可能保持簡單,所以我最終不會遇到任何問題...... – Ofeargall 2010-10-21 20:40:14

+0

根據我的經驗,最簡單的規範化應該關注對象和關係。你有'部門','供應商'和'產品'。 「類」並不是真實的,但是因爲你有300個,他們應該在自己的桌子上。那是四。那麼你需要看看關係。對於One-> HasMany關係,而是子表中父項的外鍵('Products'中的'class_id')。對於可以雙向共享的特殊關係(稱爲HABTM或「有屬於許多」),像Departments和Classes一樣,連接表是存儲它的最佳/最簡單的方式。 – Stephen 2010-10-21 20:57:13

+0

我的關係可能並不完全符合您的想法。您需要制定每個對象如何關聯(也許產品可以有多個類,如果有,應該有一個新表來定義HABTM關係)。在你知道每件作品的相關之後,你可以找出你需要的表格。 – Stephen 2010-10-21 20:58:49