马文是对的.
你需要三张桌子来解决这个问题.
捐赠者
DonorID
FirstName
LastName
DonorType
StreetAddress
etc.
学生
StudentID
FirstName
LastName
etc.
那你需要Student_Donor.这通常称为连接表,并实现多对多关系.
StudentID (PK) (FK to Student)
DonorID (PK) (FK to Donor)
DonorOrdinal
如果StudentID = 5有四个ID = 6,7,11,15的捐赠者,那么你就有这些行
StudentId DonorId DonorOrdinal
5 6 1
5 7 2
5 11 3
5 15 4
DonorOrdinal列允许您指定学生的主要捐赠者和次要捐赠者.我无法从你的问题中看出这是多么重要,但能够订购这些东西是有帮助的.请记住这一点:正式来说,SQL SELECT查询以不可预测的顺序返回行,除非您还指定了ORDER BY.
如果您想展示您的学生及其捐赠者,您将需要以下查询:
SELECT s.StudentID, s.FirstName, s.LastName,
sd.DonorOrdinal,
d.DonorType, d.DonorID, d.FirstName, d.LastName
FROM student s
LEFT JOIN student_donor sd ON s.StudentID = sd.StudentID
LEFT JOIN donor d ON sd.DonorID = d.DonorID
ORDER BY s.StudentID, sd.DonorOrdinal, d.DonorID
这将按照ID的顺序显示所有学生(无论是否有LEFT JOIN的捐赠者),然后按DonorOrdinal的顺序显示他们的捐赠者.