mysql - 数据库:表设计/结构

标签 mysql database database-design phpmyadmin

我是数据库结构和设计的新手。目前,我正在创建一个类(class)目录,该目录将根据类(class)名称和日期匹配类(class)描述。我画了一张描述类(class)的表格,其中包括 course_codename 和所有其他相关信息。然后,我绘制了另一张表格,将这些类(class)与授课时间联系起来。

我缺少分类为 all_year 的类(class)。我还缺少一种方法来标记专业下的类(class)。由于假设一门类(class)可以属于多个专业,因此将一个专业的数据放入另一个专业会迫使您重复数据。有什么想法可以将这两件事实现到我的表设计中吗?或者关于如何重组我的设计的建议。如果可能,请向我展示一个在我的 phpmyadmin 数据库中执行的查询。

表格类(class)示例

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( Spring 为 0,秋季为 1)

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

最佳答案

要将类(class)链接到专业——这是一对多的关系(一门类(class)到许多专业)——你想使用具有这种结构的链接表:

 table courses_majors
 major_id int
 course_id int

请记住也为该表编制索引 - 这非常重要。然后你可以填充它,一门类(class)甚至去很多专业,很多类(class)去一个专业(多对多关系)。

然后您可以在该表中的表上运行连接:

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

然后在你的类(class)表中添加一个 major_id - 这只会给你一个从类(class)到专业的一对一关系,但是很多类(class)可以加入一个专业。

至于每年,我会在数据库中添加一个字段来说明这一点,可能是一个很小的 ​​int 并将其设为 0 或 1。

关于mysql - 数据库:表设计/结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13150791/

相关文章:

android - 如何删除Android应用程序中的数据库

.net - linq to sql将这个查询翻译成: "select *"?格式是不是效率低下

mysql - 大量写入/插入会影响数据库索引吗?

database-design - 如果有的话,图形数据库如何水平扩展?

mysql - 大型 MySql 表给服务器带来过多负载

java - 代码在导出后不起作用,但在导出之前起作用

javascript - PHP MySqli 查询无法正常工作,但脚本标记内没有错误

mysql - SQL 逻辑不等于

mysql - MariaDB *.myi 文件没有出现在文件管理器中

mysql - 使用 python 3 连接到 mySQL