具有多个外键到同一个表的MS Access表

时间:2011-08-29 20:55:56

标签: sql ms-access-2010

我在MS Access中有一个包含4列的表,它们都包含一个id,它是另一个表中的主键,我想知道是否有其他方法可以执行此操作,如果不是,我怎么能得到访问让我加入这些没有错误,它无法告诉我想要加入的东西。几乎这些id是学生表的一部分,它们包含用于该块的主管的ID,并且有4个块,我需要能够跟踪每个主管对每个块的学生。

主管表:

CREATE TABLE supervisors 
( id NUMBER primary key
, last_name TEXT
, first_name TEXT
, mi TEXT
, m_number TEXT
, email HYPERLINK
, status TEXT
, notes MEMO
) ;

学生表:

CREATE TABLE students 
( id NUMBER primary key
, last_name TEXT
, first_name TEXT
, mi TEXT
, m_number TEXT
, email HYPERLINK
, blk1_supervisor_id NUMBER
, blk2_supervisor_id NUMBER
, blk3_supervisor_id NUMBER
, blk4_supervisor_id NUMBER
) ;

我无法让它让blk1,2,3,4字段的外键到管理程序表,更不用说同时执行连接了blk1_supervisor_id和blk2_supervisor_id。

3 个答案:

答案 0 :(得分:1)

不知道你的表架构,这是我能为你做的最好的......

SELECT SV.Name, S.Name, SB.Block
FROM Students as S

   INNER JOIN Student_Blocks AS SB
   ON S.StudentID = SB.StudentID

   INNER JOIN Supervisors AS SV
   ON SB.Block1SupervisorID = SV.SupervisorID
   AND SB.Block2SupervisorID = SV.SupervisorID
   AND SB.Block3SupervisorID = SV.SupervisorID
   AND SB.Block4SupervisorID = SV.SupervisorID

ORDER BY SB.Block

答案 1 :(得分:0)

您可以保持您的主管表现在,让学生表只有真正的学生属性(下至电子邮件)。然后你创建一个StudentsSupervisor关系表:

CREATE TABLE StudentsSupervisors 
( StudentId NUMBER 
  SupervisorId Number )

其中两个字段构成PK。如果您需要进一步确定关系,您可以将blockNumber添加到该表中,并最终将其包含在PK中,如果相同的SuperVisor可以在不同的块中连接到同一个学生两次。

答案 2 :(得分:-1)

一种快速简便的方法来正确规范表。从下面的每个语句中选择一个选项。 一个学生可以没有/只有一个/很多主管。 主管可以没有/只有一个/很多学生。 在您的情况下,一个学生可以有很多主管,而一个主管可以有很多学生。因此,学生与指导者之间的关系是多对多的,这在RDBMS中是不允许的。在这种情况下,您必须在Patrick之间创建一个联接表,如Patrick Honorez所示。