Допустим как сущности: ДОМАШНЕЕ ЗАДАНИЕ, СТУДЕНТ, ОТВЕТ
и ограничения (внимательно посмотрите ограничение 1):
1)A STUDENT can give only 1 ANSWER for the same HOMEWORK
2) A HOMEWORK can be solved by (0,N) STUDENT each giving their answer
3)AN ANSWER can be submitted by (0,N) STUDENT
4)(Obviously it is possible to give the same answer
for different HOMEWORK
and that different STUDENT can give the same answer for the same HOMEWORK)
пример:
HOMEWORK STUDENT ANSWER
XXX A 1
XXX B 1
XXX C 2
YYY B 1
YYY C 1
ZZZ A 3
ZZZ C 1
ПРИМЕЧАНИЕ. СТУДЕНТ не может представить 2 решения одной и той же домашней работы; поэтому вставка строки XXX A 2 не должна быть разрешена
Я бы смоделировал это с помощью тройного отношения:
STUDENT---------(0,N) <DO>(0,N)---------HOMEWORK
(0,N)
|
|
ANSWER
Но затем перевод в реляционную модель с использованием обычных алгоритмов перевода:
-- -- means FOREIGN KEY
_____ means PRIMARY KEY
DO(HOMEWORK,STUDENT,ANSWER)
-- -- -- -- -- -- -- --
_______________________
HOMEWORK(with his attributes)
STUDENT(with his attributes)
ANSWER(with his attributes)
Поскольку ОТВЕТ является частью первичного ключа, это означает, что учащийся может решить одно и то же домашнее задание, отправив разные ответы; это нарушает желаемые ограничения.
Наверное, я бы решил это:
1)-transforming the ternary relationship DO in a binary relationship and adding an attribute ANSWER to DO
-then create a trigger to check that the value of answer in DO is a possible answer.
Or
2)Keep ternary relationship but use another trigger
Но я хотел бы знать ваше мнение (например, если бы вы смоделировали эту проблему по-другому в ER).
PS - я использую Postgres