目前第一次尝试使用SQL,所以我正在解决一些问题。这是一个示例数据库规范:
学生(姓名,性别,课程)做项目(职称)。每个项目都有 两名主管(姓名,性别,部门)。所有学生都做一个项目 但并非所有项目都被采纳。不止一个学生也可以这样做 项目。学生会定期与他们的主管见面 会议记录(日期,时间,学生,主管,笔记)。
到目前为止,我已经制定了一个ER图,我认为这是正确的:
我可以获得基础知识(例如创建学生表等),但我无法理解如何表示关系,特别是会议关系,以及如何在SQL中表示它及其属性。我应该创建一个“会议”实体吗?
答案 0 :(得分:5)
是的,您应该创建一个Meeting
实体来表示Student
和Supervisor
之间的多对多关系。在其中,您可以使用与这些表相对应的外键来关联这些表。在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)
}
对于Supervise
和Project
之间的Supervisor
,您也会做同样的事情。你也可以在Meeting表上使用一种称为复合键的东西,我想这取决于个人偏好,我通常在表示多对多关系时这样做。我不是说这是你将使用的语法,这取决于你的数据库,这只是一个指向正确方向的例子。希望能帮助到你。
同样对于你的图表(我只是猜测这是一个类)你可能想要研究诸如visio或visual范例之类的软件来创建你的ER图。虽然大多数人都能够理解您当前的图表,但这不是正确的建模。
为了好玩,我根据你的表制作了一个图表:
如果它们是多对多的关系,您会想要Supervisor
和Project
之间的实体。这称为associative entity
。我标记了我的SupervisorProject
只是为了让它们更加清晰。
修改强> 忽略了学生和项目是多对一的事实,修复了这个,对不起。
答案 1 :(得分:0)
回应Cohagen this stackoverflow post表明,即使没有属性,也可以通过保持关系表来表示像Supervise
这样的多对多关系。相比之下,Do
表位于多对一关系之间,并且没有属性,因此我们可以摆脱它,只需在学生的项目表中添加外键引用。