0

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,
);
4

1 に答える 1