Database design 数据库设计问题

Database design 数据库设计问题,database-design,Database Design,我正在为一个用户可以对图片和视频进行评论的应用程序设计一个数据库 我应该为评论保留单独的表格吗(图片评论和视频评论) 或者我是否应该保留一个用于注释的表和其他映射表,如(图片\u注释\u映射和视频\u注释\u映射)。 哪种方法更好?为什么? 细节 方法1: user id name Picture id link video id link comment_video id user_id video_

我正在为一个用户可以对图片和视频进行评论的应用程序设计一个数据库

我应该为评论保留单独的表格吗(图片评论和视频评论)
或者
我是否应该保留一个用于注释的表和其他映射表,如(图片\u注释\u映射和视频\u注释\u映射)。

哪种方法更好?为什么?

细节
方法1:

user
     id
     name

Picture
     id
     link
video
     id
     link

comment_video
     id
     user_id
     video_id
     comment
comment_picture
     id
     user_id
     picture_id
     comment
方法2:

user
     id
     name

picture
     id
     link
video
     id
     link

comment
     id
     user_id
     comment

comment_picture_mapping
     id
     comment_id
     picture_id
comment_video_mapping
     id
     comment_id
     video_id

哪种方法更好?为什么?

您可以只使用一个表注释,其中一个字段将指定注释的类型。这基本上是选项2,没有映射,一个字段就足以知道它是什么类型的注释。至于视频或图片ID,您可以将它们视为通用对象,消费者可以根据类型或注释或对象MIME类型来决定如何处理它们。这将允许您在将来添加更多类型的注释

Comment
 id
 user_id
 comment_text
 comment_type
 linked_object_id

CommentObect
  id
  type
  object

我将创建一个名为“Comment”的实体,并在该实体上添加与user的关系映射。注释实体还将在一列上包含枚举值,表示其是用于图片还是用于视频。差不多-

enum MimeType {
    PICTURE, VIDEO;
}

class Comment {
    @ManyToONe
    private User user;
    @Enumerated
    private MimeType mimeType;
}

为什么我喜欢这种方法?因为它更干净,生成的实体更少,而且我不必编写不同的查询来搜索不同类型的mime类型注释。由于注释在diff表上,我可以延迟加载它们。

我会使用您的方法2,因为这样做更容易“搜索所有注释”

您只需要大约三个实体(如果不包括用户实体,则需要两个)

您的方法2意味着一个特定的评论可以是关于多个图片或视频的。这就是你想要的吗


用户{一对多}注释{多对一}媒体(媒体类型)

如果我使用ENUM,那么设计将不会是关系型的。不,我不希望这样。我希望每个对象都有一条评论‘我想说的是,方法2所暗示的唯一一件事是,关于类型a的评论与关于B的评论具有相同的形式,他们是这样做的。我已经改正了@RAHUL:我想你的意思是“每个评论一个对象,每个对象零个,一个或多个评论”。我使用这种方法是因为符合评论条件的对象是固定的,所以enum很容易解决这个问题。此外,枚举将更快,表的数量也将减少(从而减少联接的数量)