在Access数据库表中,顺序字段必须是唯一的,但仅当学生ID在记录之间匹配时

时间:2015-12-10 22:03:57

标签: database validation duplicates one-to-many ms-access-2013

我正在维护一个Access数据库,用于学生入学。我有一个包含传记信息的主表和一个包含应用程序信息的辅助表,并允许每个学生有多个应用程序(每个学生都有一个唯一的学生ID;该ID存储在两个表中,以及应用程序是如何匹配的给学生们。)

每个应用程序都分配了一个"应用程序编号,"并且每个学生只能有一个具有指定编号的申请(即,学生A不能有两个申请编号" 1",但可以有1,2和3)。

我想创建一种某种类型的验证规则来防止重复,但整个列并不是唯一的...它只是与指定的学生有关。

有没有办法创建这样的规则,还是我应该以不同的方式安排我的数据?如果它意味着更高效的工作流程,我愿意做出改变。

我希望这是有道理的......我不确定如何最好地描述这一点。谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

如果您希望用户在执行数据输入时提供有效的唯一"应用程序编号",那么您要查找的规则将是StudentIdApplicationNumber上的唯一索引。 StudentId。 (请记住,您可以创建包含多个列的索引。)这意味着每对ApplicationNumberusing (ScotiaNYAEntities context = new ScotiaNYAEntities()) { foreach (string line in File.ReadLines(pathToFile)) { if (line.Contains("AMOUNT:")) { if (IsAmount) { string amount = line.Replace("AMOUNT:", string.Empty).Trim(); TTransaction txn = new TTransaction(); txn.Amount = amount; txn.TRN = "sdfgsdfg"; context.TTransactions.Add(txn); } } } context.SaveChanges(); } 必须是唯一的。

但是,我应该注意,要求进行数据输入的用户必须自己提供一个唯一的应用程序编号,这对用户不友好。

考虑以下备选方案:

  1. 让数据库建议一个唯一的申请号。或者,更好的是,

  2. 在填写申请表时,甚至不建议任何号码,而是在提交申请时发出一个唯一的申请号。或者,甚至更好,

  3. 停止在数据库中存储应用程序编号,而只有在需要显示应用程序编号时,数据库才会根据应用程序的数据输入的用户ID和日期来计算它们。 (警告:如果学生有3个应用程序,而应用程序#2被删除,那么旧的应用程序#3将重新编号为#2,从而导致混淆。因此,这只有在不允许删除的情况下才有效。)