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

Posted

技术标签:

【中文标题】3个强实体集的数据库设计【英文标题】:Database design for 3 strong entity sets 【发布时间】:2018-02-18 00:18:22 【问题描述】:

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

【问题讨论】:

您可能想使用切换表,它只有实体表的外键... @UsagiMiyamoto 是的...我也这么认为...但这并不意味着表会太大,因此可能会导致查询性能低下。 Tips on many:many mapping tables 【参考方案1】:
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

【讨论】:

索引在哪里!! @RickJames 什么索引? 没有索引的表大多是无用的,至少当你超过几行时。 PK 和 FK 创建隐式索引,但我不知道还有哪些其他列...

以上是关于3个强实体集的数据库设计的主要内容,如果未能解决你的问题,请参考以下文章

数据库课程设计金融数据库设计与实现

数据库系统概念笔记——第7章:数据库设计和E-R模型

数据库设计那些事儿

数据库设计笔记

数据库系统概念笔记——第八章:关系数据库设计

「深度学习一遍过」必修28:基于C3D预训练模型训练自己的视频分类数据集的设计与实现