0

我在 MS Access 中有一个表,其中有 4 列,它们都包含一个 id,它是另一个表中的主键,我想知道是否有另一种方法可以做到这一点,如果没有,我怎样才能让 Access 让我加入这些没有错误,它无法告诉我要加入什么。几乎这些 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 了。

4

3 回答 3

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
于 2011-08-29T21:08:23.710 回答
0

您可以保持现在的 Supervisors 表,拥有一个只有真正 Student 属性的 Student 表(下至电子邮件)。然后创建一个 StudentsSupervisor 关系表:

CREATE TABLE StudentsSupervisors 
( StudentId NUMBER 
  SupervisorId Number )

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

于 2011-08-29T21:22:43.170 回答
-1

一种正确规范化表格的快速简便的方法。从下面的每个陈述中选择一个选项。一个学生可以没有/一个/多个导师。主管可以没有/一个/多个学生。在您的情况下,一个学生可以有多个主管,一个主管可以有多个学生。因此,学生和主管之间的关系是多对多的,这在 RDBMS 中是不允许的。在这种情况下,您必须在两者之间创建一个连接表,正如 Patrick Honorez 向您展示的那样。

于 2020-04-22T16:58:21.660 回答