1

学校のコースカタログのテーブル構造の設計が完了しました。私は4つのテーブル、、、を使用しmajorscoursescourse_hoursますcourse_date。以下に、各テーブルのコンポーネントの詳細を示します。一部のテーブルは、に基づくインデックス付けを使用しcourse_idます。私はデータベースに不慣れで、データベース内にこれらのテーブルを構築するのに苦労しています。を使用してこれらのテーブルをリンクさせるにはどうすればよいcourse_idですか?または、私の目的のためにこれらのテーブルを構造化するためのより良い方法がありますか。可能であれば、これらのテーブルを作成するためのクエリを提供することは素晴らしいことです。

うまくいけば、変数にright type(、、、intなど)を使用しています。varchartext

テーブルコースの例

id serial
course_name varchar
course_code varchar
description text

テーブルcourse_datesの例(インデックスを使用)

id int
course_id int
year date
semester int

テーブルcourse_hoursの例(インデックスを使用)

id int
course_id int
hours int

テーブルメジャーの例(1対多の関係-インデックス)

 major_id int
 course_id int 
 major_name varchar

したがって、入力されたデータベースには次のものが含まれます。

テーブルcourses

course_id course_code course_name       course_description
1     INF1000     Visual Studio I   "Basic programming"
2     INF1001     Visual Stuido II  "More programming"

course_dates(春は0、秋は1、通年は2)

id course_id year semester
1  1         2012 0
2  1         2013 1
3  2         2013 1

テーブルcourse_hours

id course_id course_hours 
1  1         3 
2  1         4 
3  2         4 

テーブルmajors

id course_id major_name
1  1         Computer Engineering 
2  1         Information Systems 
3  2         Network Administrator
4

2 に答える 2

3

私はいくつかの再構築を行います:

  • コースに時間を追加し、course_hours テーブルを削除します (別のテーブルに時間を抽出する利点はありません)。
  • course_dates は semester という名前の方が適切で、フィールドは year (int) と semester (int) になります。
  • 専攻は各専攻を説明するだけなので、course_id を取り出して xref テーブルに入れます。
  • すべてのテーブルの名前を単数形に変更します (スタイル設定のみ)

次のような構造を提供します。 ERD

編集:mysqlボックスに戻しました。この構造のスクリプトは次のとおりです。データベースごとに変更できるため、文字セットとエンジンの種類を変更したい場合があることを覚えておいてください。これらはおそらくデフォルトのままで問題ありません

CREATE TABLE IF NOT EXISTS `course` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(100) NOT NULL,
  `code` varchar(10) NOT NULL,
  `description` varchar(500) DEFAULT NULL,
  `hours` tinyint(6) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

CREATE TABLE IF NOT EXISTS `course_semester_xref` (
  `course_id` int(11) NOT NULL,
  `semester_id` int(11) NOT NULL,
  PRIMARY KEY (`course_id`,`semester_id`),
  KEY `semester_id` (`semester_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE IF NOT EXISTS `major` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  `description` varchar(500) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

CREATE TABLE IF NOT EXISTS `major_course_xref` (
  `major_id` int(11) NOT NULL,
  `course_id` int(11) NOT NULL,
  PRIMARY KEY (`major_id`,`course_id`),
  KEY `course_id` (`course_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE IF NOT EXISTS `semester` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `year` smallint(6) NOT NULL,
  `semester` tinyint(4) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

ALTER TABLE `course_semester_xref`
  ADD CONSTRAINT `course_semester_xref_ibfk_2` FOREIGN KEY (`semester_id`) REFERENCES `semester` (`id`),
  ADD CONSTRAINT `course_semester_xref_ibfk_1` FOREIGN KEY (`course_id`) REFERENCES `course` (`id`);

ALTER TABLE `major_course_xref`
  ADD CONSTRAINT `major_course_xref_ibfk_2` FOREIGN KEY (`course_id`) REFERENCES `course` (`id`),
  ADD CONSTRAINT `major_course_xref_ibfk_1` FOREIGN KEY (`major_id`) REFERENCES `major` (`id`);
于 2012-10-31T14:38:20.073 に答える
0

テーブル course_hours

id course_id course_hours
1 1 3
2 1 4
3 2 4

course_hoursに対応する場合はcourse_dates, year + semester、 に統合する必要があります。統合しcourse_datesないと、リンクできず、不要な追加テーブルが保存されます。

于 2012-10-31T14:48:46.460 に答える