2009-10-08 90 views
3

我想決定是爲每個部分創建一個全局視圖表還是1。例如,讓我們說我有產品,類別和網頁。MYSQL表結構

難道我有3個表e.g:

CREATE TABLE `tbl_products` (
`p_id` INT NOT NULL , 
`p_views` INT NOT NULL , 
INDEX (`p_id`) 
) ENGINE = MYISAM 

CREATE TABLE `tbl_categories` (
`c_id` INT NOT NULL , 
`c_views` INT NOT NULL , 
INDEX (`c_id`) 
) ENGINE = MYISAM 

CREATE TABLE `tbl_pages` (
`pg_id` INT NOT NULL , 
`pg_views` INT NOT NULL , 
INDEX (`pg_id`) 
) ENGINE = MYISAM 

或者我有1臺存儲所有如

CREATE TABLE `tbl_views` (
`view_id` INT NOT NULL , 
`view_type` VARCHAR(10) NOT NULL , 
`view_views` INT NOT NULL , 
INDEX (`view_id`) 
) ENGINE = MYISAM 

其中view_type是產品,類別或頁面。

每種解決方案的優點/缺點是什麼?

在此先感謝。

回答

2

我真的很喜歡1表方法,這使得數據庫整潔,我認爲這很重要。

另外,稍後您可能需要添加另一個類型,您不必添加另一個表,只需添加一個具有不同view_type的行。

0

把它們放在一張桌子裏,這樣比較好,比如說你必須選擇no。所有3個視圖一起訪問單個表比三個單獨的表更容易和更快,或者說你必須更新否。兩個或兩個以上的意見view_type的再好多了

0

在這種情況下,我建議去一個表。這三個表格之間的唯一區別是類型,因此我不認爲它們是必需的。作爲僅使用一個表的額外好處,如果添加新類型的視圖,則不需要創建新的數據庫表 - 您可以簡單地使用新的view_type鍵。但是,如果您需要針對不同類型視圖的不同數據段(例如:「頁面」視圖需要列「x」和「類別」視圖需要列「Y」),那麼您需要單獨的表(這稱爲數據庫正常化)。

0

我決定使用哪種方法來自需要多少記錄以及信息量有多大變化。如果你只是列出幾個視圖,一張桌子是好的。

如果產品+類別+頁面的數量少於一千,我會將它們合併到一張表中。優點是,如果您稍後要添加一個字段(例如:過時的標誌),則只需將其添加到一個表中即可。缺點是您使用(稍微)更多空間,即存儲內存。

隨着記錄數量變大,分隔列表可以提高性能。如果一種類型比其他類型多得多,那麼較小的類型可能會陷入解析或維護表中。如果時間不同,空間可能成爲一個問題。例如:如果產品開始需要更多信息(例如樣式,價格或允許查看它的人),但Pages和Categories永遠不會執行,表格將保留Pages和Categories不會使用的空間。然後,頁面和類別記錄開始看起來與產品混雜在一起。