2011-02-04 53 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) ; 
相關問題