mysql データベースには、合計 7 つのテーブルがあります。通常、インストラクターは 1 つのアカデミーにのみ所属しますが、アカデミーには複数のインストラクターが所属できます。同様に、1 つのアカデミーで多くのコースを教えることができます。どのインストラクターがどのコースを教えたかではなく、x または y アカデミーでどのコースが教えられているかを記録しています。また、各アカデミーには主要な連絡担当者がおり、インストラクターとは異なり、連絡担当者は複数のアカデミーの一員になることができます。最終的に、私が選んだ特定のアカデミーへのリンクされたデータを見ることができるクエリを実行したいと思います。
以下のテーブルは、同じインストラクター、コースなどの値が繰り返されないように、データを保存/表示するように構成されていますか?
CREATE TABLE IF NOT EXISTS `academies` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(25) NOT NULL,
`mou_id` int(11) default NULL,
`academy_id` int(11) NOT NULL,
`street_address` varchar(50) NOT NULL,
`city` varchar(25) NOT NULL,
`state` varchar(25) NOT NULL,
`country` varchar(25) NOT NULL,
`zipcode` varchar(5) NOT NULL,
`telephone` varchar(15) NOT NULL,
`comments` text,
`last_contacted` date default NULL,
PRIMARY KEY (`id`)
) ;
CREATE TABLE IF NOT EXISTS `academy_courses` (
`id` int(11) NOT NULL auto_increment,
`academy_id` int(11) NOT NULL,
`course_name` varchar(75) NOT NULL,
`course_id` int(11) NOT NULL,
`instructor_id` int(11) NOT NULL,
`start_date` date default NULL,
PRIMARY KEY (`unique_id`),
KEY `course_id` (`academy_id`,`course_id`)
);
CREATE TABLE IF NOT EXISTS `courses` (
`course_id` int(11) NOT NULL auto_increment,
`course_name` varchar(75) NOT NULL,
PRIMARY KEY (`course_id`)
);
INSERT INTO `courses` (`course_id`, `course_name`) VALUES
(1, 'Math'),
(2, 'English'),
(3, 'Science'),
(4, 'HIstory');
CREATE TABLE IF NOT EXISTS `instructors` (
`instructor_id` int(11) NOT NULL auto_increment,
`academy_id` int(11) NOT NULL,
`instructor_name` varchar(50) NOT NULL,
`instructor_phone` varchar(15) default NULL,
`instructor_email` varchar(55) default NULL,
PRIMARY KEY (`instructor_id`),
KEY `academy_id` (`academy_id`)
);
CREATE TABLE IF NOT EXISTS `last_contacted` (
`talkedto_id` int(11) NOT NULL auto_increment,
`academy_id` int(11) NOT NULL,
`talkedto_name` varchar(50) NOT NULL,
PRIMARY KEY (`talkedto_id`),
KEY `academy_id` (`academy_id`)
);
CREATE TABLE IF NOT EXISTS `main_contact` (
`contact_id` int(11) NOT NULL auto_increment,
`academy_id` int(11) NOT NULL,
`contact_name` varchar(50) NOT NULL,
`contact_phone` varchar(15) default NULL,
`contact_email` varchar(55) default NULL,
PRIMARY KEY (`contact_id`),
KEY `academy_id` (`academy_id`)
);
CREATE TABLE IF NOT EXISTS `main_contact_bridge` (
`academy_id` int(11) NOT NULL,
`contact_id` int(11) NOT NULL,
PRIMARY KEY (`contact_id`,`academy_id`),
KEY `academy_id` (`academy_id`)
);
更新:Emmad Kareemによる回答に基づく
CREATE TABLE IF NOT EXISTS `person` (
id int(11) NOT NULL auto_increment,
`academy_id` int(11) NOT NULL,
`person_name` varchar(50) NOT NULL,
`person_email` varchar(50) default NULL,
`person_phone` varchar(15) default NULL,
PRIMARY KEY (`id`),
CONSTRAINT `academy_id` FOREIGN KEY (`academy_id`) REFERENCES `academy` (`academy_id`) ON DELETE CASCADE ON UPDATE CASCADE,
);