两个表之间的关系:建立两个表之间的关系

时间:2013-12-17 06:53:51

标签: mysql database-design yii

我有两个表格发布图库,我已经创建了一个关系图库来发布表格。 我的要求是, 当用户上传内容时,它存储在帖子表(内容字段)中, 如果用户上传的图像是视频,我想将图像/视频名称存储在画廊表中,而图库ID则指向帖子表。我不知道该怎么做。请任何人帮助我?

发布表格

CREATE TABLE IF NOT EXISTS `post` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`user_id` bigint(20) unsigned NOT NULL,
`gallery_id` bigint(20) unsigned NOT NULL,

`content` longtext,
`photo` varchar(128) DEFAULT NULL,
`video` varchar(128) DEFAULT NULL,

`created` timestamp NULL DEFAULT NULL,
`updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `fk_forum_post_user` (`user_id`),
KEY `fk_forum_post_gallery` (`gallery_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=10 ;

ALTER TABLE `post`
ADD CONSTRAINT `fk_post_gallery` FOREIGN KEY (`gallery_id`) REFERENCES `gallery`    (`id`) ON DELETE CASCADE ON UPDATE CASCADE,

图库表

CREATE TABLE IF NOT EXISTS `gallery` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`user_id` bigint(20) unsigned NOT NULL,
`type` int(11) NOT NULL DEFAULT '1' COMMENT '1- Photo, 2-Video, 3-Documents, 4-Unknown',


`profile_picture` varchar(50) DEFAULT NULL,
`forum_image` varchar(200) DEFAULT NULL,
`forum_video` varchar(200) DEFAULT NULL,
`forum_video_link` varchar(200) DEFAULT NULL,

`created` timestamp NULL DEFAULT NULL,
`updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `fk_gallery_user` (`user_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=60 ;

是否有任何其他想法或我如何前进?

2 个答案:

答案 0 :(得分:0)

您可以通过多种方式执行此任务。您可以在代码级别以及数据库级别上执行逻辑。但这是一个快速的答案。希望这可以帮到你

  • 首先删除列(gallery_id),因为用户可能有多个图片或视频用于单个帖子,或者用户可能不想上传任何图片/视频,在这种情况下,您的图片库ID将是空。
  • 在这种情况下,您的Pk将只是postId
  • 你的画廊表很好
  • 制作第三个表名PostGalleryRealation
  • 将此表中的2列PostId作为fk从post表和galleryid作为fk从gallery table。
  • 这基本上是一对多的关系,因为一个帖子可能有多个图库
  • 在PostGalleryRealation表中插入帖子ID和图库ID
  • 最后,您可以编写此查询以获取结果。

我没有测试查询,所以这只是一个基本的想法

 Select p.id, p.content, p.created, g.type, g.profilepicture, g.forum_image 
   from post p, gallery g, postgalleryrelation pgr 
  where p.id = pgr.postid 
    and g.id = pgr.galleryid
    and p.id = 1

这只是一个想法。你可以做得更好。

答案 1 :(得分:0)

YII在使用relation创建CRUD时有gii选项。为此,您必须创建具有外键关系的表。因此YII将自动在编码级别创建关系。在为两个表创建模型时,您必须选择Build Relation选项。

查看Yii relation tutorials以获取更多信息