2011-02-04 20 views
1

に参加しませんこれは私のデータベースです:のInnoDBテーブルのための関係を作成するには - 1が

-- 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`表はphpMyAdminの中で、何らかの理由でテーブルmyepguideでそれにリンクすることができませんそれは常に "関係が追加されていない"と言う。

それを削除して再作成してもうまくいかなかったので、どうすれば修正できますか?

すべてがInnoDBフォーマットに保存されているので、なぜこのようなことが起こったのか分かりません。

ご協力いただきましてありがとうございます。

+0

外部キーは、主キー、または多分独特の列にリンクする必要があります。あなたは 'myepguide'を自分自身にリンクしていますか?どのような関係を達成しようとしているのか説明できますか?プログラムは何をリストしていますか?私のエピソードガイドは何を提示する予定ですか? –

+0

@Damir Sudarevic - いくつかの主キー、つまりエピソードとプログラムテーブルのidフィールドがあります。 – whitstone86

答えて

2

コメントに記載されているとおり、私はここで何をリンクしようとしているのかよくわからないので、まずは可能な関係のアイデアを得るためにこれを使うことができます。

enter image description here

EDIT

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) ; 
+0

phpmyadminでこれをどうすればできますか? – whitstone86

+0

@ whitstone86 - 編集を参照してください。 –

関連する問題