Если вы выполняете связь «многие ко многим» в базе данных MySQL, необходимо ли передавать все идентификаторы ключей в таблицу соединений? - PullRequest
0 голосов
/ 02 марта 2012

Итак, я работаю с MySQL Workbench 5.2 и делаю EER-диаграмму для своей базы данных, и когда я устанавливаю связь между многими (многие таблицы) между таблицами (а эти таблицы уже связаны с другими таблицами), она создает таблицу соединенийсо всеми другими связями в двух таблицах, к которым вы присоединяетесь ... мой вопрос: необходимо ли иметь все эти другие ключи?Вы не можете просто получить первичный ключ таблицы соединений, а затем просто идентификаторы двух таблиц, к которым вы относитесь?Или я что-то упускаю?

вот часть моей БД:

-- -----------------------------------------------------
  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;

, так что, как вы можете видеть в таблице истории, она имеет внешние ключи для нескольких вещей, даже если она ссылается только на две таблицы.

1 Ответ

0 голосов
/ 02 марта 2012

У вас должны быть все первичные ключи таблиц, которые вы связываете.

Я не уверен, что вы правильно выбираете свои первичные ключи.Зачем использовать 'user_id' и 'catagories_id' как часть составного ключа, если у вас есть уникальный идентификатор story_id?

Вы путаете внешние ключи с первичными?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...