如果在MySQL数据库中执行多对多关系,是否需要传输所有密钥id';谁去联接表?

如果在MySQL数据库中执行多对多关系,是否需要传输所有密钥id';谁去联接表?,mysql,relational-database,junction-table,Mysql,Relational Database,Junction Table,因此,我正在使用MySQL workbench 5.2,我正在为我的数据库制作一个EER图,当我在一个表之间建立一个多对多关系(这些表已经与其他表建立了关系)时,它将创建一个连接表,其中包含您要连接的两个表中的所有其他关系。。我的问题是:是否有必要拥有所有其他钥匙?您不能只拥有联接表的主键,然后只拥有与之相关的两个表的id吗?还是我忽略了什么 以下是我的数据库的一部分: -- ----------------------------------------------------- Tabl

因此,我正在使用MySQL workbench 5.2,我正在为我的数据库制作一个EER图,当我在一个表之间建立一个多对多关系(这些表已经与其他表建立了关系)时,它将创建一个连接表,其中包含您要连接的两个表中的所有其他关系。。我的问题是:是否有必要拥有所有其他钥匙?您不能只拥有联接表的主键,然后只拥有与之相关的两个表的id吗?还是我忽略了什么

以下是我的数据库的一部分:

-- -----------------------------------------------------
  Table `test`.`storys_has_comments`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `test`.`storys_has_comments` (
    `storys_id` INT NOT NULL ,
    `storys_user_id` INT NOT NULL ,
    `comments_id` INT NOT NULL ,
    PRIMARY KEY (`storys_id`, `storys_user_id`, `comments_id`) ,
    INDEX `fk_storys_has_comments_comments1` (`comments_id` ASC) ,
    INDEX `fk_storys_has_comments_storys1` (`storys_id` ASC, `storys_user_id` ASC) )
 ENGINE = MyISAM;

  -- -----------------------------------------------------
   Table `test`.`storys`
  -- -----------------------------------------------------
 CREATE  TABLE IF NOT EXISTS `test`.`storys` (
     `id` INT NOT NULL ,
     `user_id` INT NOT NULL ,
     `catagories_id` INT NOT NULL ,
     PRIMARY KEY (`id`, `user_id`, `catagories_id`) ,
     INDEX `fk_storys_user` (`user_id` ASC) ,
     INDEX `fk_storys_catagories1` (`catagories_id` ASC) )
  ENGINE = MyISAM;

-- -----------------------------------------------------
 Table `test`.`comments`
-- -----------------------------------------------------

CREATE  TABLE IF NOT EXISTS `test`.`comments` (
   `id` INT NOT NULL ,
   `body` TINYTEXT NULL ,
   PRIMARY KEY (`id`) )
ENGINE = MyISAM;

因此,正如您在story表中看到的,它有多个外键,即使它只链接到两个表

您应该拥有所链接表的所有主键

我不确定您是否正确选择了主键。当您拥有唯一的id时,为什么要将“用户id”和“类别id”用作复合密钥的一部分


你把外键和主键混淆了吗?

我添加了一个我想弄明白的例子。编辑以反映问题的变化谢谢你的更新。我不确定我是否明白。您是说storys_has_comments表应该将主键更改为story_id吗?至于你的第二个问题,我相信我知道区别。。。我是这样理解的:每个表中只能有一个主键,而该主键不能有相同的主键两次。外键只是引用数据库中另一个表的主键的一种方式,但它也不能重复。。这是正确的吗?从上面我建议您的Stories表只需要一个主键story_id。我认为您的其他id是外键,而不是主键。在这种情况下,我认为您的链接表应该只包含story\u id和comment\u id。外键值可以在表中重复,这就是它的原因。