2009-12-06 62 views
1

那么我需要在自定义编码的社交网站上实现评论功能。这些评论需要在各种页面上实现,比如视频,图片,相册等,与Facebook类似。评论的实施,是否有任何最佳做法?

执行此操作的最佳实践是什么?

制作一个这样的字段的全球评论表,并根据需求页面上的评论类型抓取评论。

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

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

回答

5

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

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

有用于实现子类型三个基本方案:

  1. 创建每个亚型一个单独的表;
  2. 使用Conent ID的外键创建名为Content的子表,其中包含从属表Video,Album等。内容表格还有一个内容类型字段来表明哪个表与该记录相关;或
  3. 将所有内容放入名为Content的表格中,该表格包含一组可选(空)列以覆盖子类型。当存储子类型特定信息所需的列几乎没有差异时,这是最合适的。

如果您将注释关联到视频或相册的表格,您可以使用所谓的专有的圆弧。这不是数据建模的推荐做法。

编辑:例如:

  • 用户(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都是内容的外键。ID;
  • Content.content_type是“Image”,“Video”或“Album”之一;
  • 一个相册包含一个或多个存储在Image中的照片;
  • 连接表专辑照片将相册链接到图像(多对多关系);

希望清除它。

+1

这是第一范式的做法。好帖子! – 2009-12-06 04:50:07

+0

如果我们省略“相册照片”并添加像image.albumid这样的默认为用户默认相册ID的字段,会发生什么情况? – 2009-12-06 04:51:13

+0

在图像中放入相册ID会将该图像限制为仅在一个相册中。那是你要的吗? – cletus 2009-12-06 04:52:07