将关系属性从ER图转换为SQL

时间:2013-12-11 18:21:03

标签: mysql sql entity-relationship diagram

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

  

学生(姓名,性别,课程)做项目(职称)。每个项目都有   两名主管(姓名,性别,部门)。所有学生都做一个项目   但并非所有项目都被采纳。不止一个学生也可以这样做   项目。学生会定期与他们的主管见面   会议记录(日期,时间,学生,主管,笔记)。

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

enter image description here

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

2 个答案:

答案 0 :(得分:5)

是的,您应该创建一个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)
}

对于SuperviseProject之间的Supervisor,您也会做同样的事情。你也可以在Meeting表上使用一种称为复合键的东西,我想这取决于个人偏好,我通常在表示多对多关系时这样做。我不是说这是你将使用的语法,这取决于你的数据库,这只是一个指向正确方向的例子。希望能帮助到你。

同样对于你的图表(我只是猜测这是一个类)你可能想要研究诸如visio或visual范例之类的软件来创建你的ER图。虽然大多数人都能够理解您当前的图表,但这不是正确的建模。

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

如果它们是多对多的关系,您会想要SupervisorProject之间的实体。这称为associative entity。我标记了我的SupervisorProject只是为了让它们更加清晰。

修改 忽略了学生和项目是多对一的事实,修复了这个,对不起。

答案 1 :(得分:0)

回应Cohagen this stackoverflow post表明,即使没有属性,也可以通过保持关系表来表示像Supervise这样的多对多关系。相比之下,Do表位于多对一关系之间,并且没有属性,因此我们可以摆脱它,只需在学生的项目表中添加外键引用。