1

我已经完成了为学校课程目录设计表结构。我正在使用四个表majors,,,,courses。下面我详细介绍了每个表的组成部分。一些表将使用基于. 我是数据库新手,正在努力在我的数据库中构建这些表。如何使这些表与 using 链接在一起?或者有没有更好的方法来为我的目的构建这些表。如果可能的话,提供一个查询来创建这些表会很棒。course_hourscourse_datecourse_idcourse_id

希望我对变量使用正确的类型(、、、intvarchartext

餐桌课程示例

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

表专业示例(一对多关系索引)

 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 最好命名为学期,字段为年(int)和学期(int)
  • 专业应该只解释每个专业,所以取出 course_id 并将其放入外部参照表
  • 将所有表格重命名为单数形式(只是样式偏好)

给你一个结构,如: 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 回答