2010-02-13 187 views
0

在我的網站上,用戶可以發表評論並將它們分組。mysql數據庫規範化

例如

category: good quotes 
links: "some quote 1", "some quote 2", and so on. 

所以分類和評論的數量是由用戶決定的。

我在想如何組織這個在mysql數據庫中。

我不能爲每個類別設置一張表,因爲會有很多類別。

但是我怎麼能組織這個表?

應該是一個類別中的一個類別,並且評論是一個行嗎?或者它應該是另一種方式?

但是,在定義表格後增加列數不是一種不好的做法嗎?

任何建議都會有所幫助!

回答

1

您可以創建類別表和徵求意見表(這樣一類是一個行,一個註釋是在一行中的各表)。您還可能需要另一個包含兩列的表格 - 類別行的ID和註釋行的ID。

然後,爲了表明註釋屬於某個類別,您需要向最後一個表格添加一行。例如,如果ID 42的評論屬於ID 6和8的類別,則添加行(42,6)和(42,8)。

0

您可以使用類似(這是SQL Server,而應該給你一個想法)

DECLARE @Categories TABLE(
     CategoryID INT, 
     CategoryDescription VARCHAR(50) 
) 

DECLARE @Comments TABLE(
     CommentID INT, 
     Comment VARCHAR(MAX), 
     CategoryID INT, 
     UserID INT 
) 

你甚至可以也許有每個用戶的具體類別,那麼類別表改爲

DECLARE @Categories TABLE(
     CategoryID INT, 
     CategoryDescription VARCHAR(50), 
     UserID INT 
) 

這將允許您在UI上爲其查找指定用戶特定類別。

您可以通過創建一個UserCategories表進一步完成此設計,這將允許多重用戶鏈接到多個類別。

這幾乎就像一個規則表。

DECLARE @UserCategories TABLE(
     UserID INT, 
     CategoryID INT 
) 

,然後保持原有的分類表作爲

DECLARE @Categories TABLE(
      CategoryID INT, 
      CategoryDescription VARCHAR(50) 
    ) 
0

您需要一個評論表和一個類別表,因此每個評論和每個類別都將成爲其各自表中的一行。

假設註釋可以屬於多個類別,您還需要一個「橋接」表,其中每行將包含註釋ID和它所屬類別的ID。

1

我有不同的意見和類別,然後「連接」表映射關係(和避免重複):

僞SQL:

comment { 
    id 
    comment 
}  
category { 
    id 
    category 
}  
comment_categories { 
    fk_comment_id 
    fk_category_id 
} 
+0

從這個設計它似乎是一個給出的評論可以屬於很多類別... – 2010-02-13 11:54:52

+0

不幸的是,這個問題沒有明確說明評論和貓是121,12m還是m2m - 我猜m2m。 – reech 2010-02-13 12:09:27