2012-10-02 48 views
2

我只是想從設計,效率和空間的角度來看,什麼是更好的選擇?自加入或使用兩個表,然後加入它們?mysql效率:自我連接與兩個表分開

我有一個存儲產品設計細節的MySQL數據庫,designer_type可能是company_staff或某個customer_type

最初我想到有兩張桌子,一張叫做staff_design,另一張叫做customer_design

無論哪種方式的design信息保持幾乎相同,不同之處在於,如果它是一個客戶,有跡象顯示staff_design並不需要兩個額外的列,其中之一是外鍵的staff_design的ID,和其中一個是design_name(用戶而不是員工可以添加的東西)。這兩列都可以是NULL。

所以,如果我設計的數據庫,這兩個表合併,只有一個design表,那麼這個表將有額外的3列,可能是NULL經常:它會需要有design_type(指定customer ,或staff),然後是我上面提到的兩個額外的列。 (design_namestaff_designFK)。

哪種設計更好?

我傾向於單表設計,主要是爲了減少硬盤處理(獲取兩個不同的表而不是一個表)。那麼我將不得不使用大量的自聯接。

什麼被認爲是專業更好的方法?預計員工設計人員可以節省數千個設計,而只有高級客戶和額外收費的客戶才能節省他們自己的定製設計。所以肯定會有比客戶設計更多,更多的員工設計。

+0

您能否在'design'表中記錄計數的數量級(在一個表的情況下)添加一些信息。 – bpgergo

+0

編輯了這個問題在最後添加它。 – user961627

回答

2

由於記錄的數量級只有幾千個,我建議去單桌設計。這會讓你的生活更輕鬆,並且表格的大小不能證明分割表格的優化。

1

如果它讓你的生活變得更輕鬆,如果我能很好地理解你的設計,那麼把所有東西合併成一張表是沒有錯的。

特別是如果您的Mysql數據庫使用Innodb引擎:NULL字段don't take space(或可忽略的數量,1位左右)。

1

你在這裏有什麼本質上是繼承(即類別,子類型,泛化層次等)。

出於3 possible ways要實現它,您正在描述「所有類在一個表中」。沒有什麼不對的 - 每種方式都有自己的優點和缺點,這在你的情況下似乎是適當的。