参考表使用哪个外键?

时间:2011-12-14 19:07:16

标签: mysql database database-design dns erd

student提出新的topicadviser接受或拒绝topic。如果他接受topic,则顾问将使用student监督topic

现在这就是它的所在。

meetingstudent之间安排adviser,用于与该主题相关的讨论。

如果我制作meeting_table。我该如何推荐meeting?关于被选中的topic?如果是这种情况,则topic_id将成为外键。

或者我应该使用advisor_idstudent_id作为外键来引用它?

哪种方法更简单?因为我将在完成数据库设计后制作一个Web应用程序。

5 个答案:

答案 0 :(得分:1)

基于my answer to your previous question,我会像这样扩展ERD:

enter image description here

学生在安排会议之前需要有一个主题和一个顾问。通过加入会议可以找到主题和顾问 - >学生 - > [顾问|课题]

答案 1 :(得分:0)

如果会议涉及某个主题,学生和顾问,那么它不应该引用这三个主题吗?或者对于更通用的会议模式,我会使用类似的东西:

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

此架构允许任意数量的与会者(因此您可以有一名顾问和三名学生等)。而对于奖励积分,它也会引入会议室ID。

答案 2 :(得分:0)

我建议与meeting_id会面,然后使用meeting_id和topic_id与另一个表meeting_topic会面 - 这将允许多个主题,具体取决于您的唯一性规范。此外,由于许多人可能会参加同样的会议,例如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

答案 3 :(得分:0)

我的桌子设计:

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))

这是考虑到一个学生和一个顾问在会议中最简单的数据库设计。

答案 4 :(得分:0)

根据给出的信息,在我看来,引用会议到该主题很好地工作。但是,这是否最简单取决于您期望的查询(包括其相对频率)。