代码之家  ›  专栏  ›  技术社区  ›  Lumpi01

SQL 2不同的注释类型-最佳解决方案?

  •  1
  • Lumpi01  · 技术社区  · 6 年前

    我有一个数据库,用户可以在其中对新闻或图片发表评论。 实现这一点的最佳解决方案是什么? 我已经想出了3种变体

    第一个:

    Comments
    - id (PK)
    - userID
    - timestamp
    - text
    - newsID (FK News, can be NULL)
    - pictureID (FK Picture, can be NULL)
    

    第二个:

    Comments
    - id (PK)
    - userID
    - timestamp
    - text
    
    News_Comments
    - newsID (PK, FK News)
    - commentID (PK, FK Comment)
    
    Picture_Comments
    - pictureID (PK, FK Picture)
    - commentID (PK, FK Comment)
    

    第三个:

    News_Comments
    - id (PK)
    - newsID (FK News)
    - userID
    - timestamp
    - text
    
    Picture_Comments
    - id (PK)
    - pictureID (FK Picture)
    - userID
    - timestamp
    - text
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   Thorsten Kettner    6 年前

    我会排除变量2,因为它表示n:m关系,这不是你想要的。

    变体1和2看起来都不错,主要取决于个人喜好。

    对于变体1,您可能会认为这两个都是评论,如果您同时还想记录每个评论的投票,您只需在该表中添加一个投票列。

    对于变体3,您可能会争辩说这两个是对不同事物的评论,如果您同时还想对语法和写作风格进行投票,那么您只需要在新闻评论表中添加适当的列,而在图片评论表中,您可能会对艺术性进行投票。

    如前所述,这在一定程度上是个人喜好,但也关系到你认为这些表格在遥远的将来会是什么样子:-)


    在第三种变体中,应删除 commentID (PK, FK Comment) 从表中,因为没有注释表。这些表应该有自己的ID(例如。 news_comment_id (PK) )以及 newsid pictureid 将仅仅是外键,而不再是主键的一部分。