如何使用特定字段组合将 table 限制为 5 条记录
How to limit a table to 5 records with a certain field combination
我正在使用 MS Access 2016。
假设我有一个学生table、一个学科table(即地理、历史等)和一个记录每个学生选择的学科的学生学科table。
StudentSubject 包含 StudentId 和 SubjectId 作为外键。
任何学生都不能选择超过 5 个科目。
有没有什么方法可以在 table 上定义验证规则,使得给定的 StudentId 不能在 StudentSubject table 中出现超过 5 次?
我可以通过引入额外的 table 来强制执行约束,但如果可能的话,我想避免这种情况。
我还想在 table 级别定义约束,而不是使用在通过表单插入记录时调用的 vba 代码。据我所知,Access 没有触发器之类的东西,就像在 sql 系统中那样。
您可以使用 CHECK
约束来限制可能性:
ALTER TABLE StudentSubject
ADD CONSTRAINT Max5Subjects
CHECK(
NOT EXISTS(
SELECT 1
FROM StudentSubject
GROUP BY StudentID
HAVING Count(StudentID) > 5
)
)
请注意,这可能会稍微减慢数据输入速度,尤其是在 StudentID
未编入索引的情况下。
需要在 ANSI 92 兼容模式下或使用 ADO(例如使用 CurrentProject.Connection.Execute
)执行检查约束。更多详情
要使用 ADO 执行它,您可以立即使用这一行 window:
CurrentProject.Connection.Execute "ALTER TABLE StudentSubject ADD CONSTRAINT Max5Subjects CHECK(NOT EXISTS( SELECT 1 FROM StudentSubject GROUP BY StudentID HAVING Count(StudentID) > 5))"
此外,请记住,如果以某种方式存在违反约束的记录(例如,因为它们在添加约束之前存在),您的 table 将被完全锁定。
我正在使用 MS Access 2016。
假设我有一个学生table、一个学科table(即地理、历史等)和一个记录每个学生选择的学科的学生学科table。
StudentSubject 包含 StudentId 和 SubjectId 作为外键。
任何学生都不能选择超过 5 个科目。
有没有什么方法可以在 table 上定义验证规则,使得给定的 StudentId 不能在 StudentSubject table 中出现超过 5 次?
我可以通过引入额外的 table 来强制执行约束,但如果可能的话,我想避免这种情况。
我还想在 table 级别定义约束,而不是使用在通过表单插入记录时调用的 vba 代码。据我所知,Access 没有触发器之类的东西,就像在 sql 系统中那样。
您可以使用 CHECK
约束来限制可能性:
ALTER TABLE StudentSubject
ADD CONSTRAINT Max5Subjects
CHECK(
NOT EXISTS(
SELECT 1
FROM StudentSubject
GROUP BY StudentID
HAVING Count(StudentID) > 5
)
)
请注意,这可能会稍微减慢数据输入速度,尤其是在 StudentID
未编入索引的情况下。
需要在 ANSI 92 兼容模式下或使用 ADO(例如使用 CurrentProject.Connection.Execute
)执行检查约束。更多详情
要使用 ADO 执行它,您可以立即使用这一行 window:
CurrentProject.Connection.Execute "ALTER TABLE StudentSubject ADD CONSTRAINT Max5Subjects CHECK(NOT EXISTS( SELECT 1 FROM StudentSubject GROUP BY StudentID HAVING Count(StudentID) > 5))"
此外,请记住,如果以某种方式存在违反约束的记录(例如,因为它们在添加约束之前存在),您的 table 将被完全锁定。