【问题标题】:How to link two relational tables in mySQL如何在 mySQL 中链接两个关系表
【发布时间】:2015-03-04 21:19:10
【问题描述】:

我有两张桌子

  1. 视频表中的视频(v_id、v_duration、v_status、upload_date)主键为v_id。
  2. video_tags(tag_name, video_id)

视频可以有很多标签,这就是我将它们分成两个表格的原因。问题是当我使用 MySQL 数据库创建这两个表时,我设法使用下面的 sql 语句创建了第一个表, create table video (v_id int, v_duration double, v_status varchar(50) default 'needs approval', upload_date DATE, primary key(v_id))

但第二次我不能因为对引用键的误解。

这个 mySQL 语句是真的吗?

创建表 video_tags(tag_name varchar(50), video_id int, 主键(vidoe_id, tag_name))

【问题讨论】:

  • 为什么我不能使用video_id作为外键和tag_name作为主键?我知道它的概念问题,但我希望得到一个合理的答案@helloworld
  • 您的答案没有在第一张和第二张表之间添加任何关系,它们会断开连接!

标签: mysql sql relational-database database-schema


【解决方案1】:

这应该可行:

CREATE TABLE `video_tags` (
`tag_id` INT NOT NULL,
`tag_name` VARCHAR(50) NOT NULL,
`video_id` INT NOT NULL,
 PRIMARY KEY (`tag_id`),
 INDEX `video_id` (`video_id` ASC),
 INDEX `tag_name` (`tag_name` ASC),
 CONSTRAINT `video_id_fk`
 FOREIGN KEY (`video_id`)
 REFERENCES  `video` (`v_id`))

使用另一列作为主键

【讨论】:

  • 为什么我不能使用video_id作为外键和tag_name作为主键?我知道它的概念问题,但我希望得到一个合理的答案@helloworld
  • 应该可以。您的代码没有定义关系。您只创建了 2 个索引。
  • tag_name 不能单独作为主键,因为它可以重复多个视频 id。示例:(tag_name,video_id)==>(教育,123)(社区,123)(教育,155)
  • 只需使用另一列作为主ID,并将视频ID设置为参考视频表的索引。我更新了答案以反映变化。
猜你喜欢
  • 2011-01-18
  • 1970-01-01
  • 1970-01-01
  • 2016-10-06
  • 1970-01-01
  • 1970-01-01
  • 2011-08-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多