Sql 关于正常化的问题

Sql 关于正常化的问题,sql,normalization,database-normalization,Sql,Normalization,Database Normalization,我只是想知道在web应用程序中使用哪一个更好。我有一个可以让用户发布到网站的web应用程序。有三种不同类型的帖子,但非常相似,我可以把它们放在一个表中。这样可以吗 我可以用这种方法使表格正常化吗?(将类型置于其中一项下) 表1 UserPost post_id user_id type 表2 Post post_id datetime text 还是使用一张桌子更好 表格 Post user_id post_id datetime type text 我倾向于第三种方法,除非有人能指

我只是想知道在web应用程序中使用哪一个更好。我有一个可以让用户发布到网站的web应用程序。有三种不同类型的帖子,但非常相似,我可以把它们放在一个表中。这样可以吗

我可以用这种方法使表格正常化吗?(将类型置于其中一项下)

表1

UserPost
post_id 
user_id
type
表2

Post
post_id 
datetime
text
还是使用一张桌子更好

表格

Post
user_id
post_id 
datetime
type
text

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

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


如果这三种不同类型的帖子可以用一个公共字段来描述,那么像
type
这样的鉴别器就可以了。

组合这些表,将它们像表1和表2中那样分开并没有什么好处。现在,如果表1有一个独立于post_id的键,您可以消除一些冗余。例如:

Table 1

UserPost
user_post_id 
user_id
type

Table 2

Post
post_id 
user_post_id 
datetime
text

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

如果我理解正确,您有两个不同类型的帖子和不同的列集?有些列是相等的?据我所知,有三种不同类型的帖子或多或少都是文本。是的,三种类型的用户输入都是文本。我想我可以允许/不允许代码中的类型,但将其存储在同一个位置。您尚未为表指定任何键,我们也不知道应该应用哪些依赖项。这些表的含义似乎非常不同,但是如果没有更多的信息,您得到的任何答案都只是猜测。在最后一个表中,user_id是外键,post_id是主键,您可以在另外两个表中自己计算出来。这个问题不是我独有的,我只是想在前进之前澄清我的困惑。这里有一个例子。用户可以提交图片链接、youtube视频链接或状态更新。它们都是一个“帖子”。你认为他们需要分开的桌子吗?这样做的优点/缺点是什么?