mysql - 将 ER 图中的关系属性转换为 SQL

标签 mysql sql entity-relationship diagram

目前我是第一次尝试掌握 SQL,所以我正在解决一些问题。这是一个示例数据库规范:

Students (name, gender, course) do projects(title). Each project has two supervisors (name, gender, department). All students do a project but not all projects get taken. More than one student can do the same project. Students meet one of their supervisors regular and these meetings are recorded (date, time, student, supervisor, notes).

到目前为止,我已经绘制了一个我认为正确的 ER 图:

enter image description here

我可以掌握基础知识(例如创建学生表等),但我无法理解如何表示关系,特别是 session 关系,以及如何在 SQL 中表示它及其属性。我是否应该创建一个“ session ”实体?

最佳答案

是的,您应该创建一个Meeting 实体来表示StudentSupervisor 之间的多对多关系。在其中,您可以使用与相应表相对应的外键与这些表相关联。在 SQL 中,它可能看起来像这样:

Create table Meeting {
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
student_id INT NOT NULL,
supervisor_id INT NOT NULL,
//rest of the fields...   
FOREIGN KEY (student_id) REFERENCES Student(id)
FOREIGN KEY (supervisor_id) REFERENCES Supervisor(id)
}

您还可以为 ProjectSupervisor 之间的 Supervise 做同样的事情。你也可以在你的 session table 上使用一种叫做复合键的东西,我想这取决于个人喜好,我通常在代表多对多关系时这样做。我并不是说这是您将使用的语法,这取决于您的数据库,这只是一个为您指明正确方向的示例。希望对您有所帮助。

对于您的图表(我只是猜测这是一个类),您可能需要查看 visio 或视觉范例等软件来创建您的 ER 图表。虽然大多数人都能理解您当前的图表,但这不是正确的建模。

为了好玩,我根据你的表格做了一个图表: enter image description here

如果 SupervisorProject 是多对多关系,您可能需要一个实体。这称为关联实体。我标记了我的 SupervisorProject 只是为了让它们更清楚一些。

编辑 忽略了学生和项目是多对一的事实,修正了这个问题,抱歉。

关于mysql - 将 ER 图中的关系属性转换为 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20526995/

相关文章:

PHP PDO SQL_CALC_FOUND_ROWS/FOUND_ROWS() 奇怪的问题

sql - MySQL查询的条件过滤器

SQL Server : How to write and execute a prepared statement?

SQL Server 用户对存储过程和基础表的权限

sql - 何时在 RDBMS 中使用三元关系而不是聚合?

php - 如何在发帖表单中实现隐藏字段,以免用户不小心重复发帖? (PHP/MySQL)

mysql - 批量更新表中的数据 - 最好的方法?

mysql - 为什么在 MySQL 中使用 '' 或 ""不能通过 ORDER BY 对列别名进行排序?

eclipse - 包含与引用之间的ECore有什么区别?

sql - 创建概念模型和关系