我已经完成了学校课程目录的表格结构设计。我使用了四个表majors
,courses
,course_hours
,course_date
。下面我详细介绍了每个表的组成部分。某些表将使用基于course_id
的索引。我是数据库的新手,并在我的数据库中构建这些表时苦苦挣扎。如何使用course_id
将这些表链接在一起?或者是否有更好的方法来为我的目的构建这些表。如果可能的话,提供查询来创建这些表将会很棒。
希望我使用righ类型(int
,varchar
,text
等)来表示我的变量。
表课程
的示例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
答案 0 :(得分:3)
我会做一些重组:
给你一个像这样的结构:
编辑:回到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`);
答案 1 :(得分: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
中,否则您无法将其链接在一起并保存不必要的附加表格。