【问题标题】:Question about Normalisation关于标准化的问题
【发布时间】:2011-06-10 18:31:15
【问题描述】:

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

我可以用这种方式规范化表格吗? (把 type 放在下面)

表 1

UserPost
post_id 
user_id
type

表 2

Post
post_id 
datetime
text

或者使用一张桌子会更好吗?

表格

Post
user_id
post_id 
datetime
type
text

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

【问题讨论】:

  • 如果我理解正确的话,您有两种不同类型的帖子和不同的列集?并且有些列是相等的?
  • 据我了解,共有三种不同类型的帖子,它们或多或少都是文本
  • 是的,三种类型的用户输入是文本。我想我可以允许/禁止代码中的类型,但将其全部存储在同一个地方。
  • 您没有为您的表指定任何键,我们不知道应该应用哪些依赖项。这些表格似乎意味着非常不同的东西,但如果没有更多信息,您得到的任何答案都只是猜测。
  • 最后一张表中,user_id 是外键,post_id 是主键,其他两个可以自己算。这个问题不是我独有的,我只是想在继续之前清除我的困惑。

标签: sql normalization database-normalization


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    组合表格,像在 Table1 和 Table2 中那样将它们分开并没有真正的优势。现在,如果表 1 有一个与 post_id 不同的键,则可以消除一些冗余。示例:

    Table 1
    
    UserPost
    user_post_id 
    user_id
    type
    
    Table 2
    
    Post
    post_id 
    user_post_id 
    datetime
    text
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 这是一个例子。用户可以提交图片链接、youtube 视频链接或状态更新。他们都是一个“帖子”。您认为他们需要单独的表格吗?这样做的优点/缺点是什么?
      猜你喜欢
      • 2019-06-09
      • 2020-12-27
      • 1970-01-01
      • 2012-11-21
      • 1970-01-01
      • 1970-01-01
      • 2010-10-04
      • 1970-01-01
      相关资源
      最近更新 更多