数据库:表格设计/结构
Posted
技术标签:
【中文标题】数据库:表格设计/结构【英文标题】:Database: Tables design/structure 【发布时间】:2012-10-20 11:44:02 【问题描述】:我是数据库结构和设计的新手。目前,我正在创建一个课程目录,该目录将根据课程名称和日期匹配课程描述。我画了一张描述课程的表格,其中包括course_code
、name
和所有其他相关信息。然后我画了另一个表格,将这些课程与授课时间联系起来。
我缺少归类为 all_year
的课程。我也错过了如何在专业下标记课程的方法。由于假设一门课程可以属于多个专业,因此将数据从一个专业放入另一个专业会迫使您重复数据。有什么想法可以在我的表格设计中实现这两件事吗?或有关如何重组我的设计的建议。如果可能,请告诉我一个要在我的phpmyadmin
DB 中执行的查询。
餐桌课程示例
id serial
course_code text
description text
course_dates 表示例
id serial
course_id serial
year date
semester
表专业示例
major_id int
course_id int
所以一个填充的数据库可以包含以下内容:
Table courses
id course_code description
1 INF1000 "Basic programming"
2 INF1001 "More basic programming"
表 course_dates(春季为 0,秋季为 1)
id course_id year semester
1 1 2012 0
2 1 2013 1
3 2 2013 1
【问题讨论】:
【参考方案1】:要将课程链接到专业 - 这是一对多的关系(一门课程与多个专业) - 您需要使用具有这种结构的链接表:
table courses_majors
major_id int
course_id int
记住也要为这个表建立索引——它非常重要。然后你可以填充它,让一门课程甚至去许多专业,许多课程到一个专业(多对多关系)。
然后您可以在此表中的表上运行联接:
select * from courses left join courses_majors on courses.id = courses_majors.course_id left join majors on courses_majors.majors_id = majors.id
当然可以添加where子句等
另一种方法是创建专业表:
majors
id int
name varchar
然后在您的课程表中添加一个 major_id - 这只会为您提供从课程到专业的一对一关系,但许多课程可以加入专业。
至于 Yearly,我会在数据库中添加一个字段来说明这一点,可能是一个很小的 int,然后将其设为 0 或 1。
【讨论】:
+1 谢谢。我已经用你的建议更新了我的问题。链接表是我不知道该怎么做的事情。您能否编写一个查询来创建这三个表并链接它们? 你只想再创建一张表:create table courses_majors (courses_id int(32), majors_id int(32))以上是关于数据库:表格设计/结构的主要内容,如果未能解决你的问题,请参考以下文章