2011-02-04 99 views
1

这是我的数据库: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格式所以我不明白为什么会发生这种情况。

任何帮助表示赞赏!

+0

外键应该链接到主键,或者也许唯一列。你正在将myepguide连接到自己?你能解释你想达到什么样的关系吗?程序应该列出什么?我的情节指南应该呈现什么? – 2011-02-04 20:18:36

+0

@Damir Sudarevic - 有一些主键,即情节和节目表中的id字段。 – whitstone86 2011-02-04 22:15:32

回答

2

正如评论中提到的那样,我不太确定你在这里链接什么,所以对于初学者,你可以用它来了解可能的关系。

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) ; 
相关问题