Ссылаясь на таблицу, используя какой внешний ключ? - PullRequest
0 голосов
/ 14 декабря 2011

A student предлагает новый topic.adviser принимает или отклоняет topic.Если он примет topic, советник будет контролировать, что student с этим topic.

Теперь это то место, куда меня заводит.

A meeting запланировано междуstudent и adviser, которые будут использоваться для обсуждения этой темы.

Если я сделаю meeting_table.Как мне ссылаться на meeting?Что касается topic, который был выбран?Если бы это было так, то topic_id будет внешним ключом.

Или я должен ссылаться на него, используя advisor_id и student_id в качестве внешних ключей?

Что было быпроще подход?как я буду делать веб-приложение после завершения проектирования базы данных.

Ответы [ 5 ]

1 голос
/ 19 декабря 2011

Исходя из моего ответа на ваш предыдущий вопрос , я бы расширил эту ERD следующим образом:

enter image description here

Студент должен иметь тему и советника, прежде чем планировать встречу. И тему, и советника можно найти, присоединившись к Meeting -> Student -> [Adviser | Topic].

0 голосов
/ 14 декабря 2011

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

0 голосов
/ 14 декабря 2011

Я бы предложил встречу с meeting_id, а затем другую таблицу meeting_topic с meeting_id и topic_id - это позволит использовать несколько тем, в зависимости от вашей спецификации уникальности.Кроме того, поскольку многие люди могут посещать одно и то же собрание, например, meeting_attendee, по крайней мере, с двумя рядами: один для студента и один для консультанта.как то так:

meeting
----------
meeting_id
meeting_date
location_id (?)

topic
----------
topic_id
description

meeting_topic
-----------
meeting_id
topic_id

meeting_attendee
-----------
meeting_id
attendee_id
0 голосов
/ 14 декабря 2011

Дизайн моего стола:

Student (id, name)

Advisor(id, name)

Topic(id, name, created_by(foreign key id of student), advisor(foreign key id of advisor))

Meeting(id, name, schedule, topic (foreign key id of topic))

Это самый простой дизайн базы данных, учитывающий одного студента и одного консультанта на собрании.

0 голосов
/ 14 декабря 2011

Если встреча относится к теме, студенту и советнику, не должна ли она упомянуть все три?Или для более общей схемы собраний я бы использовал что-то вроде:

ATTENDEES
id
name
role              ; i.e. 'student', 'advisor', etc

ROOM
id
description

TOPIC
id
description

MEETING
id
topic_id            ; FK to TOPIC.id
room_id             ; FK to ROOM.id
description

MEETING_ATTENDANCE
attendee_id         ; FK to ATTENDEE.id
meeting_id          ; FK TO MEETING.id

Эта схема позволит произвольному количеству участников (так что вы можете иметь одного советника и трех студентов и т. Д.).А для бонусных очков он также добавляет идентификатор комнаты для собраний.

...