评论的实施,这有什么最佳做法吗?

时间:2009-12-06 04:26:55

标签: mysql optimization comments

我需要在自定义编码的社交网站上实现评论功能。评论需要在类似于facebook的视频,图片,专辑等各种页面上实现。

实施此操作的最佳做​​法是什么?

使用这样的字段创建一个全局注释表,并根据所需页面上的注释类型获取注释。

commentid int(10)
userid int(10)
comment_type ENUM('video','picture')
comment varchat(200)
parent int(10)

或为每条评论制作单独的表格?

1 个答案:

答案 0 :(得分:5)

我不这样做。我会在另一边使用子类型。

  • 创建一个名为(例如)Content;
  • 的父表
  • 视频,图片,专辑等是内容的子实体;
  • Comment具有Content ID的外键。

实施子类型有三种基本方案:

  1. 为每个子类型创建一个单独的表;
  2. 使用Conent ID的外键创建一个名为Content的表,其中包含从属表Video,Album等。 Content表还有一个Content Type字段,用于指示哪个表与该记录相关;或
  3. 将所有内容放入名为Content的表中,该表包含一堆可选(可为空)列以覆盖子类型。当存储特定于子类型的信息所需的列几乎没有差异时,这是最合适的。
  4. 如果您将“注释”与“视频”或“相册”表关联起来,则可以使用所谓的独占弧。这不是数据建模的推荐做法。

    修改,例如:

    • 用户(ID,用户名,姓名,姓氏,电子邮件地址)
    • 内容(id,content_type,submitter_id,submitted_date);
    • 图片(id,url,height,width);
    • 视频(id,url,格式,高度,宽度,长度);
    • 专辑(id,name);
    • 相册照片(id,album_id,photo_id);
    • 评论(id,author_id,comment_date,comment,content_id);

    一些注意事项:

    • submitter_id和author_id是User.id的外键;
    • Image.id,Video.id和Album.id都是Content.id;
    • 的外键
    • Content.content_type是“图片”,“视频”或“相册”之一;
    • 相册包含一张或多张存储在图片中的照片;
    • 联接表相册照片将相册链接到图像(多对多关系);

    希望能够解决它。