MS Access表与多个外键在同一表中的关系。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MS Access表与多个外键在同一表中的关系。相关的知识,希望对你有一定的参考价值。
我在 MS Access 中有一个表,其中有 4 列,它们都包含一个 ID,这个 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了。
你可以保持你的Supervisors表现在的样子,有一个学生表,只有真正的学生属性(到电子邮件).然后你创建一个学生Supervisor关系表。
CREATE TABLE StudentsSupervisors
( StudentId NUMBER
SupervisorId Number )
其中两个字段构成PK。如果您需要进一步确定关系,您可以在表中添加 blockNumber
的表,并最终将其包含在PK中,如果同一个SuperVisor可以在不同的区块中两次链接到同一个学生。
在不知道你的表模式的情况下,这是我能为你做的最好的事情......。
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
一个快速而简单的方法来正确规范你的表。从下面的每个语句中选择一个选项.一个学生可以有nononemany主管.一个主管可以有nononemany学生.在你的情况下,一个学生可以有很多主管,一个主管可以有很多学生。因此,学生和主管之间的关系是many-many,这在RDBMS中是不允许的。在这种情况下,你必须在两者之间创建一个连接表,就像Patrick Honorez向你展示的那样。
以上是关于MS Access表与多个外键在同一表中的关系。的主要内容,如果未能解决你的问题,请参考以下文章
java - 如何根据Java Servlet中的外键在一列中显示多个值?