我希望找到将一个基表映射到多个表的最佳实践。例如,如果我有以下任何一个基表(评论,标签,收藏夹,评级),它可以映射到一个或多个表,如(博客文章,图片,视频)。以下示例可以提供更好的解释。
更多信息:
我希望使用这些表来创建一个使用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
答案 0 :(得分:0)
Tom H.提供了另一个问题的答案,我认为这个问题已经回答了我的问题。我不知道如何给予他适当的信誉,但他的解决方案的链接在这里: Database tables, one table referencing multiple unrelated tables
感谢您的帮助Tom。
我仍然愿意接受建议,但考虑到上面链接中发布的信息,我想我将会制作多张地图表。