1

私の大学の任務のために、私は病気のためにそしてすべてが学校のためにいくつかの基本的な管理システムを設計しなければなりません。基本的な継承を次の形式でモデル化することにしました。

  • 人->学生
  • 人->スタッフ
  • 人->ガーディアン

人(PersonID、FirstName、LastName)

Student(StudentID(PersonIDを参照する)、...)

これを最初にUMLでモデル化し、これに継承があるため、これを行うことにした理由。

StudentID、StaffID、GuardianIDの両方を持つインシデントを格納した別のテーブルがあります。しかし、3つの継承された人の名前すべてを表示する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)
);

現実的には、インシデントと各スタッフおよび学生との間には、ある種の多対多の関係が期待されます。それ以外の場合、事件は 1 人の学生と 1 人の職員のみを巻き込むことができますか?

于 2009-01-10T22:20:27.777 に答える
1

これは正しくないです。Person クラスが必要です。他のクラスでは、特定の Person が Student、Staff などであると判断されます。学生でもある Staff Person がある場合はどうなりますか? 生徒が卒業したらどうなりますか?

これは、リレーショナル モデルと OO モデルの間のインピーダンスの不一致の典型的な例です。

たとえば、次の 3 つのテーブルを使用できます。

PERSON
PersonId LastName FirstName

STUDENT 学生 ID 個人 ID

STAFF
StaffId PersonId

于 2009-01-10T21:50:54.857 に答える
0

実際の使用方法はわかりませんが、再利用性のためだけに継承を使用することはお勧めできません。

一見するPersonと、大学の管理システム (似たようなもの) でクラスを持つことは正しくないように思えます。

課題の目的/目的、つまり、何をすべきかについて言及したほうがよいでしょう。

于 2009-01-10T22:00:37.050 に答える