2016-06-14 3 views
0

У меня есть три образования: студенты, профессора и essay_topics.Моделирование: взаимосвязь трех таблиц

Ситуация: студентов может написать несколько очерков с essay_topic под руководством профессора . (жирный шрифт: лица)

Но они могут писать только сочинение под наблюдением конкретного профессора один раз. (не два раза тот же профессор) И они могут не написать реферат с essay_topic, как и они.

Это единственное ограничение, но должно быть возможно, что: Профессор может руководить несколькими учениками с тем же essay_topic. Различные профессора могут контролировать другого ученика с тем же essay_topic.

Итак, у нас есть эссе отношений (StudentID, EssayTopicID, ProfessorID). Но я не вижу, какие первичные ключи сейчас. Или какие отношения мы имеем здесь? Я бы предположил, что n: 1: 1 (модель er). Но тогда только StudentID будет основным ключом к этой таблице - что на самом деле не так, потому что студент мог написать только один эссе ...

+0

У меня будет таблица учеников, таблица эссе и таблица профессора с денормализованной таблицей, соединяющей все три, у которой есть совместное уникальное ограничение ключа на id ученика и профессор id –

ответ

0

Если записать функциональные зависимости для ваших ограничений, это помогает понять ситуацию:

(student, essay_topic) -> professor 
(student, professor) -> essay_topic 

У вас есть два перекрывающихся кандидатских ключи - (student, essay_topic) и (student, professor) , Вы можете выбрать либо как первичный ключ в физической модели, при условии, что вы добавите уникальное ограничение для другого.

Я подозреваю, что это ситуация, которая не может быть точно смоделирована в ER (да, ER не является полной моделью данных, в отличие от реляционной модели). Я бы отказался от показателей мощности и включил FD в качестве комментария.

PS. Пожалуйста, не путайте отношения между объектами с отношениями между таблицами. Связи между объектами записываются в IN как связь между (обычно разными) наборами объектов. Связи между таблицами являются ограничениями внешнего ключа и обеспечивают ограничение подмножества на двух столбцах одного и того же набора объектов.

0

Если вы хотите, чтобы ваш механизм базы данных не добавлял несколько равных тем и профессоров на одного учащегося, вы будете требуется составное ключевое/составное ограничение над student_id + topic_id + Professor_id. Посмотрите на этот вопрос: How do I specify unique constraint for multiple columns in MySQL?

+0

Спасибо за ссылку. Но что мне интересно, что бы это выглядело в модели отношения сущности? – ScientiaEtVeritas

+0

Вы хотите, чтобы он создал для вас диаграмму ER ?! – Drew

+0

Как я понимаю, у вас будет как минимум 4 таблицы: студенты, тема, профессор и эссе. В моем случае эссе будут иметь student_id, topic_id и Professor_id как внешние ключи. – Marat

Смежные вопросы