将注释表映射到mysql中的多个表的最佳实践是什么?

时间:2011-01-11 19:29:28

标签: mysql foreign-keys comments

我希望找到将一个基表映射到多个表的最佳实践。例如,如果我有以下任何一个基表(评论,标签,收藏夹,评级),它可以映射到一个或多个表,如(博客文章,图片,视频)。以下示例可以提供更好的解释。

更多信息:
我希望使用这些表来创建一个使用Active Record的Yii应用程序。

我提出的解决方案(Mysql):
我的基本表

create table comment (
 id int(4) unsigned not null auto_increment primary key,
 attach_id int(4) unsigned not null,           #used to attach to a specific post/photo/video
 attach_type_id tinyint(1) unsigned not null,  #foreign key to attach_type(id)
 comment text not null,
 user_id int(4) unsigned null,
 datetime_added datetime not null,
 foreign key (attach_type_id) references attach_type(id)
);

我的“全球制图”表:

create table attach_type (
 id tinyint(1) unsigned not null auto_increment primary key,
 table_name varchar(20) not null  #used for reference purposes only
);

两个“多个”表的原始示例:

create table blog_post (
 id int(4) unsigned not null auto_increment primary key,
 title varchar(100) not null,
 post text not null,
 user_id int(4) unsigned null,
 datetime_added datetime not null
);

create table photo (
 id int(4) unsigned not null auto_increment primary key,
 title varchar(100) not null,
 description varchar(255) null,
 file_name varchar(100) not null,
 user_id int(4) unsigned null,
 datetime_added datetime not null
);

检索博客帖子id = 54 的所有评论 blog_post表在attach_type表中的行的id = 1
帖子在blog_post表中的行的行ID = 54

select * from comments where attach_type_id=1 and attach_id=54;

所以(评论,标签,收藏,评级),上面看到的评论,可以附加到blog_post和/或照片。同样,可以将多个评论附加到单个blog_post / photo(允许多个用户发表评论)。我的问题是在mysql中最好的方法是什么。以上看起来像是一个正确的设置,或者你会建议一个更好的方法和原因。如果使用上述解决方案,是否有人怀疑任何明显的缺点?感谢您提前回复,我只是想弄清楚这样做的最佳方式。

我相信这个话题与我的要求有关,但并没有真正回答我的问题:
Database tables, one table referencing multiple unrelated tables

1 个答案:

答案 0 :(得分:0)

Tom H.提供了另一个问题的答案,我认为这个问题已经回答了我的问题。我不知道如何给予他适当的信誉,但他的解决方案的链接在这里: Database tables, one table referencing multiple unrelated tables

感谢您的帮助Tom。

我仍然愿意接受建议,但考虑到上面链接中发布的信息,我想我将会制作多张地图表。