mysql - 3个强实体集的数据库设计

标签 mysql database-design relational-database

我正在尝试为 3 个表设计一个数据库:教师、类(class)、学生。
- 一个老师可以有很多学生,可以教授很多类(class)。
- 一个学生可以有很多老师并学习很多类(class)。
- 一门类(class)可以由多名教师教授,也可以招收多名学生。
我希望能够确定哪个学生正在学习哪门类(class),由哪位老师授课。

最佳答案

CREATE TABLE student (
  id   serial PRIMARY KEY,
  name varchar(255) NOT NULL,
  -- other columns, constraints, etc...
);
CREATE TABLE teacher (
  id   serial PRIMARY KEY,
  name varchar(255) NOT NULL,
  -- other columns, constraints, etc...
);
CREATE TABLE course(
  id   serial PRIMARY KEY,
  name varchar(255) NOT NULL,
  -- other columns, constraints, etc...
);
CREATE TABLE student_course (
  student_id integer NOT NULL REFERENCES student(id),
  course_id  integer NOT NULL REFERENCES course(id),
);
CREATE TABLE teacher_course (
  teacher_id integer NOT NULL REFERENCES teacher(id),
  course_id  integer NOT NULL REFERENCES course(id),
);

SELECT s.id, s.name, c.id, c.name, .id, t.name
FROM student s
  JOIN student_course sc ON s.id = sc.student_id
  JOIN course c ON sc.course_id = c.id
  JOIN teacher_course tc ON c.id = tc.course.id
  JOIN teacher t ON tc.teacher_id = t.id

关于mysql - 3个强实体集的数据库设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46127195/

相关文章:

mysql - varchar() 主键还是 int 主键?

java - JPA 对对象使用 IN 子句

google-app-engine - 如何使用 Go 的 dataStore 创建数据模型?

mysql - 永不删除的关系数据库模式设计

mysql - 在 Access VBA 中循环 Access strSQL 中的日期

php - Symfony2 OneToMany双向引用非id列

mysql - 查找在特定上下文中一起出现的所有元素

php - 如何获取自动递增变量并将其插入到插入查询中

php - 每次提交时存储包含多个部分的数据

mysql - 如何有效查询 "latest questions"?