关于规范化的问题

时间:2011-01-17 23:09:16

标签: sql normalization database-normalization

我只是想知道哪些在Web应用程序中使用会更好。我有一个网络应用程序,让用户发布到网站。有三种不同类型的帖子,但足够相似,我可以把它们放在一张桌子下面。可以吗?

我可以用这种方式规范化表吗? (将类型置于其中)

表1

UserPost
post_id 
user_id
type

表2

Post
post_id 
datetime
text

OR会使用一个表更好吗?

表格

Post
user_id
post_id 
datetime
type
text

我倾向于第三种方式,除非有人能指出缺点。

3 个答案:

答案 0 :(得分:1)

在第一种方法中,您将始终必须在两个表中为每个用户帖子创建一行。因此,只有一个表,user_id应该是您的用户表的外键,post_id主键和其他列保存数据没有任何缺点。没有理由创建两个表。

如果三个不同类型的帖子可以由一个公共字段描述,那么type之类的鉴别器就可以了。

答案 1 :(得分:1)

结合表格,没有像在Table1和Table2中那样突破它们。现在,如果表1具有单独的密钥而不是post_id,则可以消除一些冗余。例如:

Table 1

UserPost
user_post_id 
user_id
type

Table 2

Post
post_id 
user_post_id 
datetime
text

答案 2 :(得分:0)

根据您的最新评论,我的理解是post_id将成为所有三个示例表中的候选键。如果这是正确的,那么我建议你为每个独特的属性集(每种类型的帖子)创建一个表。因此,如果所有帖子具有相同的共同属性,那么将它们全部放在一个表中是有意义的,但如果有两个或三个类型,那么两个或三个表将更合适。