0

私はリレーショナル代数が初めてで、課題のために 2 つ作成する必要があります。SQL で直面した問題を書き出しましたが、関係代数でそのような結合を表現する方法がわかりません。ヘルプ/ポインタは大歓迎です。

SELECT ps.FirstName AS StudentFirstName, ps.LastName AS StudentLastName, pst.FirstName AS StaffFirstName , pst.LastName AS StaffLastName, pg.FirstName AS GuardianFirstName, pg.LastName AS GuadianLastName, i.DateTimeReported, i.NatureOfIllness
FROM Incident i
JOIN Student s USING (StudentID)
JOIN Person ps ON (s.StudentID = ps.PersonID)
JOIN Staff st USING (StaffID)
JOIN Person pst ON (st.StaffID = pst.PersonID)
JOIN Guardian g USING (GuardianID)
JOIN Person pg ON (g.GuardianID = pg.PersonID)
WHERE i.DecisionMade IS NULL;
4

2 に答える 2

2

あなたが行っている左結合は、リレーショナル代数ではシータ結合と呼ばれ、より具体的には等結合と呼ばれることもあります。蝶ネクタイのような記号を使用し、その下に「StudentID = PersonID」と書きます (例の 2 番目の結合用)。私は派手な記号を行うことはできませんが、http://en.wikipedia.org/wiki/Relational_algebra#.CE.B8-join_and_equijoinにはいくつかの例があります。

また、6 方向の結合に問題はなく、実際に実際に発生します。

于 2009-01-25T00:03:26.490 に答える
-4

あなたは間違った方法で問題に取り組んでいると思います。現実の世界では、6 通りの参加者がいるような状況を作りたくはありません。

ここにあるように見えるのは、事件と人々です。人には役割があります。おそらく 3 つのテーブル、インシデント、ロール、および人が必要です。Person に対して 2 回参加する方法は、めちゃくちゃになるでしょう。

腰を落ち着けてデータベースの正規化について読むべきだと思います。

http://en.wikipedia.org/wiki/Database_normalization

于 2009-01-13T01:19:17.803 に答える