1

对于我的大学作业,我必须设计一些基本的疾病管理系统,以及所有的学校。我决定以以下形式对一些基本继承进行建模

  • 人 --> 学生
  • 人员 --> 员工
  • 人 --> 监护人

人员(PersonID、FirstName、LastName)

学生(StudentID(引用 PersonID),...)

我决定这样做的原因是我首先在 UML 中对其进行建模并在其中继承。

我有另一个表,其中存储了同时具有 StudentID、StaffID 和 GuardianID 的事件。但是我想知道如何在 mysql 中创建一个连接来显示所有三个继承人的名字?

例如

Student.FirstName Student.LastName、Staff.FirstName、Staff.LastName 等...

我该怎么做?

还是我这样做完全错了?

提前致谢。

http://pastebin.com/m263dd7 - 链接到我的 DDL 以获取表格。

4

3 回答 3

3

我对您描述的数据库设计没有任何问题。在 SQL 中建模继承总是有点尴尬,但您使用了问题最少的解决方案。

这是一个查询,用于回答您有关检索给定事件的学生和工作人员姓名的问题:

SELECT ps.FirstName, ps.LastName, pf.FirstName, pf.LastName
FROM Incidents i
 JOIN Students s USING (student_id)
 JOIN Persons ps ON (s.student_id = ps.person_id)
 JOIN Staff f USING (staff_id)
 JOIN Persons pf ON (f.staff_id = pf.person_id)
WHERE i.incident_id = ?;

我假设Incidents表格看起来包括以下列:

CREATE TABLE Incidents (
  incident_id SERIAL PRIMARY KEY,
  student_id  INT NOT NULL,
  staff_id    INT NOT NULL,
  FOREIGN KEY (student_id) REFERENCES Students(student_id),
  FOREIGN KEY (staff_id) REFERENCES Staff(staff_id)
);

实际上,我希望事件与每个教职员工和学生之间存在某种多对多的关系。否则,事件可能只涉及一名学生和一名工作人员?

于 2009-01-10T22:20:27.777 回答
1

这个不对。您应该有一个 Person 类,而其他类将确定某个 Person 是 Student、Staff 等。如果您有一个 Staff 也是学生,会发生什么?如果学生毕业会怎样?

这是关系模型和OO模型之间阻抗不匹配的典型例子。

例如,您可以有三个表:

PERSON
PersonId 姓 名

STUDENT StudentId PersonId

STAFF
StaffId PersonId

于 2009-01-10T21:50:54.857 回答
0

我不知道真正的用法是什么,但是仅仅为了可重用性而使用继承并不是一个好主意。

乍一看,Person在大学管理系统(类似的东西)上上课似乎是不对的。

你最好提及任务的目标/目的——应该做什么。

于 2009-01-10T22:00:37.050 回答