sql - InnoDB 和为表创建关系 - 一个不会加入

标签 sql mysql database phpmyadmin innodb

这是我的数据库:

    -- Host: localhost
-- Generation Time: Feb 04, 2011 at 01:49 PM
-- Server version: 5.0.45
-- PHP Version: 5.2.5

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

--
-- Database: `myepguide`
--

-- --------------------------------------------------------   
--
-- Table structure for table `channel1`
--

CREATE TABLE IF NOT EXISTS `channel1` (
  `id` mediumint(255) NOT NULL auto_increment,
  `channel` varchar(255) default NULL,
  PRIMARY KEY  (`id`),
  KEY `channel` USING BTREE (`channel`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;

--
-- Dumping data for table `channel1`
--

INSERT INTO `channel1` (`id`, `channel`) VALUES
(1, '<a href="channel/BBCOne.php">BBC One</a>'),
(3, '<a href="channel/ITV1.php"><i>ITV1</i></a>'),
(2, '<a href="channel/ITV2.php"><i>ITV2 </i></a>');

-- --------------------------------------------------------

--
-- Table structure for table `myepguide`
--

CREATE TABLE IF NOT EXISTS `myepguide` (
  `id` mediumint(9) NOT NULL auto_increment,
  `programme` varchar(255) NOT NULL,
  `channel` varchar(255) default NULL,
  `airdate` datetime NOT NULL,
  `displayair` datetime NOT NULL,
  `expiration` datetime NOT NULL,
  `episode` varchar(255) default '',
  `setreminder` varchar(255) NOT NULL default '<img src="alert.gif" height="16" width="22"> <a href="setreminder.php" alt="Set a reminder" target="_top">Set Reminder</a>',
  PRIMARY KEY  (`id`),
  KEY `programme1` USING BTREE (`programme`),
  KEY `channel2` USING BTREE (`channel`),
  KEY `episode` (`episode`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

--
-- Dumping data for table `myepguide`
--

INSERT INTO `myepguide` (`id`, `programme`, `channel`, `airdate`, `displayair`, `expiration`, `episode`, `setreminder`) VALUES
(1, '<a href="programmes/casualty.php">Casualty</a>', '<a href="lib/channel/ITV1"><i>BBC One </i></a>', '2011-05-18 14:30:00', '2011-05-18 14:30:00', '2011-05-18 15:00:00', 'No Fjords in Finland', '<img src="alert.gif" height="16" width="22"> <a href="setreminder.php" alt="Set a reminder" target="_top">Set Reminder</a>');

-- --------------------------------------------------------

--
-- Table structure for table `episode`
--

CREATE TABLE IF NOT EXISTS `episode` (
  `id` mediumint(9) NOT NULL auto_increment,
  `episode` varchar(255) default NULL,
  PRIMARY KEY  (`id`),
  KEY `episode` USING BTREE (`episode`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

--
-- Dumping data for table `episode`
--

INSERT INTO `episode` (`id`, `episode`) VALUES
(1, 'No Fjords in Finland'),
(2, 'Casualty 25th Special'),
(3, '<a href="Holby1.php">Palimpsest</a>');

-- --------------------------------------------------------

--
-- Table structure for table `programme`
--

CREATE TABLE IF NOT EXISTS `programme` (
  `id` mediumint(255) NOT NULL auto_increment,
  `programme` varchar(255) default NULL,
  PRIMARY KEY  (`id`),
  KEY `programme1` USING BTREE (`programme`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

--
-- Dumping data for table `programme`
--

INSERT INTO `programme` (`id`, `programme`) VALUES
(1, '<a href="programmes/casualty.php">Casualty</a>');

--
-- Constraints for dumped tables
--

--
-- Constraints for table `myepguide`
--
ALTER TABLE `myepguide`
  ADD CONSTRAINT `myepguide_ibfk_1` FOREIGN KEY (`programme`) REFERENCES `myepguide` (`programme`) ON UPDATE CASCADE,
  ADD CONSTRAINT `myepguide_ibfk_2` FOREIGN KEY (`channel`) REFERENCES `channel1` (`channel`) ON DELETE SET NULL ON UPDATE CASCADE;

出于某种原因,我无法将 'episode` 表链接到表 myepguide 中,在 Phpmyadmin 中它总是显示“未添加关系”。

删除并重新创建它也不起作用,那么我该如何解决这个问题?

所有都以 InnoDB 格式存储所以我不明白为什么会这样。

感谢任何帮助!

最佳答案

如评论中所述,我不太确定您要在此处链接什么,因此对于初学者,您可以使用它来了解可能的关系。

enter image description here

编辑

create table TvSeries (
      TvSeriesID int not null auto_increment
--  , other fields here
) ENGINE=InnoDB ;
alter table TvSeries
      add constraint pk_TvSeries primary key (TvSeriesID) ;

create table Episode (
      TvSeriesID int not null
    , EpisodeNo  int not null
--  , other fields here
) ENGINE=InnoDB ;
alter table Episode
      add constraint  pk_Episode primary key (TvSeriesID, EpisodeNo)
    , add constraint fk1_Episode foreign key (TvSeriesID) references TvSeries (TvSeriesID) ;


create table Channel (
      ChannelID int not null
--  , other fields here
) ENGINE=InnoDB ;
alter table Channel
      add constraint pk_Channel primary key (ChannelID);


create table Programme (
      ChannelID  int      not null
    , StartTime  datetime not null
    , TvSeriesID int      not null
    , EpisodeNo  int      not null
--  , other fields here
) ENGINE=InnoDB ;
alter table Programme
      add constraint  pk_Programme primary key (ChannelID, StartTime)
    , add constraint fk1_Programme foreign key (ChannelID) references Channel (ChannelID)
    , add constraint fk2_Programme foreign key (TvSeriesID, EpisodeNo) references Episode (TvSeriesID, EpisodeNo) ;


create table myEpisodeGuide (
      TvSeriesID  int      not null
    , EpisodeNo   int      not null
    , ChannelID   int      not null
    , StartTime   datetime not null
    , SetReminder int      not null 
--  , other fields here
) ENGINE=InnoDB ;
alter table myEpisodeGuide
      add constraint  pk_myEpisodeGuide primary key (TvSeriesID, EpisodeNo, ChannelID, StartTime)
    , add constraint fk1_myEpisodeGuide foreign key (TvSeriesID, EpisodeNo) references Episode (TvSeriesID, EpisodeNo)
    , add constraint fk2_myEpisodeGuide foreign key (ChannelID, StartTime)  references Programme (ChannelID, StartTime) ;

关于sql - InnoDB 和为表创建关系 - 一个不会加入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4901432/

相关文章:

php - MYSQL - 加入或子查询问题

mysql - 从更多相同的表创建一张大表

mysql - 如何删除mysql中的多个条目

PHP 使用 while 循环从数据库中删除一个项目

SQL - JOIN 的好处?

java - 统计特定列sql中出现的特定值的数量

sql - 查找或计算锦标赛的统计数据

组内的mysql限制?

mysql - SQL 将作者/故事关系从 Drupal 迁移到 WordPress

database - 我应该使用 EBS 还是 S3 来存储我的数据库?