2010-02-13 134 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