Как добавить связи между таблицами MySQL

Тема в разделе "Базы Данных", создана пользователем SweD, 10 авг 2017.

  1. SweD

    SweD

    Регистрация:
    25 ноя 2012
    Сообщения:
    60
    Симпатии:
    32
    Создана таблица по аналогу, с добавлением необходимых полей, все работает, за исключением одного столбца, необходимо присвоить уник родителя (просто скопировать айди в этот столбец) не подхватывает с родителя. Попробовал предложенное $iD, не подхватывает. Есть еще какие либо варианты? Или иные схемы может. Или может я не так что понял.
    Вот сами таблицы...
    Родитель.
    Код:
    CREATE TABLE `#__goods` (
      `goods_id` int(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'НЕОБХОДИМО КЛОНИРОВАТЬ ID в таблицу ниже #__goods_map',
      `goods_commonid` int(50) unsigned NOT NULL COMMENT '...',
      `goods_name` varchar(150) NOT NULL COMMENT '...',
      `goods_jingle` varchar(150) DEFAULT '' COMMENT '...',
      `store_id` int(20) unsigned NOT NULL COMMENT '...',
      `store_name` varchar(150) NOT NULL COMMENT '....',
      ........
      `invite_rate` DECIMAL( 10,2 )  NULL  DEFAULT '0.00' COMMENT '...',
      PRIMARY KEY (`goods_id`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COMMENT='...' AUTO_INCREMENT=100000 ;
    
    
    
    Пасынок...
    
    CREATE TABLE `#__goods_map` (
      `map_id` int(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '...',
      `store_id` int(20) unsigned NOT NULL COMMENT '...',
      `goods_id` int(20) unsigned NOT NULL COMMENT 'НЕОБХОДИМО КЛОНИРОВАТЬ ID ОТ РОДИТЕЛЯ #__goods',
      `sc_id` int(20) unsigned NOT NULL DEFAULT '0' COMMENT '...',
      `store_name` varchar(150) NOT NULL COMMENT '...',
      `name_info` varchar(50) NOT NULL COMMENT '...',
    ........
      `baidu_street` varchar(50) DEFAULT '' COMMENT '...',
      PRIMARY KEY (`map_id`),
      KEY `store_id` (`store_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='...';
    пробовал и вот так, не идет...
    Код:
        CONSTRAINT `goods` FOREIGN KEY (`goods_id`) REFERENCES `10rt_goods` ()
        CONSTRAINT `FK_tir10_goods_map_tir10_goods` FOREIGN KEY (`goods_id`) REFERENCES `10rt_goods` (`goods_id`)
    CONSTRAINT `FK_#__goods_map_tir10_goods` FOREIGN KEY (`goods_id`) REFERENCES `tir10_goods` ()
    Подскажите пожалуйста...
     
    Lasted edited by : 16 авг 2017
  2. $iD

    $iD Команда форума

    Регистрация:
    13 мар 2012
    Сообщения:
    3.560
    Симпатии:
    1.472
    Просто неправильно связь вешаешь. вот правильный вариант:
    Код:
    CONSTRAINT FK_goods FOREIGNКод KEY (goods_id) REFERENCES goods (goods_id)
    Или полный:
    Код:
    CREATE TABLE `goods` (
      `goods_id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'НЕОБХОДИМО КЛОНИРОВАТЬ ID в таблицу ниже #__goods_map',
      `goods_commonid` int(50) unsigned NOT NULL COMMENT '...',
      `goods_name` varchar(150) NOT NULL COMMENT '...',
      `goods_jingle` varchar(150) DEFAULT '' COMMENT '...',
      `store_id` int(20) unsigned NOT NULL COMMENT '...',
      `store_name` varchar(150) NOT NULL COMMENT '....',
      `invite_rate` DECIMAL( 10,2 )  NULL  DEFAULT '0.00' COMMENT '...',
      PRIMARY KEY (`goods_id`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COMMENT='...';
    
    
    CREATE TABLE `goods_map` (
      `map_id` int(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '...',
      `store_id` int(20) unsigned NOT NULL COMMENT '...',
      `goods_id` int(11) unsigned NOT NULL COMMENT 'НЕОБХОДИМО КЛОНИРОВАТЬ ID ОТ РОДИТЕЛЯ #__goods',
      `sc_id` int(20) unsigned NOT NULL DEFAULT '0' COMMENT '...',
      `store_name` varchar(150) NOT NULL COMMENT '...',
      `name_info` varchar(50) NOT NULL COMMENT '...',
      `baidu_street` varchar(50) DEFAULT '' COMMENT '...',
      PRIMARY KEY (`map_id`),
      KEY `store_id` (`store_id`),
      UNIQUE goods_id (`goods_id`),
      CONSTRAINT FK_goods FOREIGNКод KEY (goods_id) REFERENCES goods (goods_id)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='...';
    А вообще: https://dev.mysql.com/doc/refman/5.7/en/create-table-foreign-keys.html
     
    SweD нравится это.