主键(primary key) 是一个在每条记录中取值都不同的字段,这样每条记录都能被找到,也不会和别的记录混淆。验证条件(validation condition) 是某个值在被数据库接受之前必须满足的规则。ICT 实操题常要求你在刚建好的表上同时设定这两样东西。
主键保护表格的结构,验证规则保护数据的质量。两者作用不同,一个字段可以同时拥有两者。本页属于数据库结构与验证。
如何选择主键?
用三个问题检验每个候选字段。
- 它唯一吗? 两条记录可能出现相同的值吗?
- 它总是有值吗? 新记录可能缺少这个值吗?
- 它稳定吗? 这个值将来需要修改吗?
姓名通不过第一个问题。电话号码通不过第三个问题。为表格专门建立的 ID 三项都通过,所以大多数表格都使用 ID。
如何写验证条件?
先用平实的话说明允许什么,再转换成条件。
| 检查 | 平实的规则 | 条件 |
|---|---|---|
| 范围(range) | Fee 介于 0 和 200 之间 | >=0 AND <=200 |
| 长度(length) | ID 恰好 4 个字符 | LEN([MemberID])=4 |
| 必填(presence) | Name 必须填写 | Required = Yes |
| 查找(lookup) | 等级是 A、B 或 C | one of a list: A, B, C |
| 类型(type) | Quantity 是整数 | field type = integer |
不同软件的具体语法有差异,所以答题时要把意思写清楚,并使用你所用程序接受的语法。边界值最关键:”>=0” 接受 0,而 “>0” 不接受。
例题详解
一个虚构的自行车俱乐部存放会员资料。任务:为 Fee 字段设定主键和规则,费用必须从 0 到 200(含两端)。
第一步,选主键。 字段有 MemberID、Name、DateJoined、Fee。MemberID 的值是 M001、M002 等,唯一、必填、不会变。MemberID 是主键。
第二步,说明规则。 费用可以是 0、200 或两者之间的任何值。这是两端都包含的范围检查。
第三步,写出条件: >=0 AND <=200
第四步,测试边界值和范围外的值。
| 测试值 | 预期 | 原因 |
|---|---|---|
| 0 | 接受 | 等于下限 |
| 200 | 接受 | 等于上限 |
| 45.50 | 接受 | 在范围内 |
| 200.01 | 拒绝 | 超过上限 |
| -5 | 拒绝 | 低于下限 |
再用条件核对一次:0 >= 0 为真,0 <= 200 为真,所以 0 通过。200.01 <= 200 为假,所以不通过。规则的表现符合预期。
要留意的错误
常见的失误是以为通过验证的数据一定正确。
错误想法: 某会员的真实费用是 45.50,却输入了 54.50。它通过了范围检查,所以一定没错。
这项检查只测试数值是否介于 0 和 200 之间。54.50 和 45.50 都在范围内,所以两个数字对调的错误会直接通过。
改正的方法是把验证说成”过滤不合理数据的筛子”,而不是”准确性的证明”。要发现对调的数字,需要把输入内容与原始文件对比,这就是核对。考试作答时两部分都要说:规则拒绝不可能的值,而要确认值正确则需要第二项检查。
自我检测
1. 一张学生表有 StudentID、FullName 和 Class 三个字段,哪个字段最适合当主键?为什么?
查看答案
StudentID。 它唯一且不会变。两个学生可能同名或同班。
2. 写一个验证条件,使考试分数只接受 0 到 100(含两端)。说出检查类型。
查看答案
>=0 AND <=100,属于范围检查(range check)。0 和 100 都被接受,101 或 -1 被拒绝。
3. 表单要求 ID 恰好 4 个字符,用户输入了 M05。哪项检查会拒绝它?为什么?
查看答案
长度检查(length check) 会拒绝它。M05 只有 3 个字符,而规则要求恰好 4 个。
下一步
有了主键和规则之后,可以练习把数据放进表里:导入一份小型虚构数据集。此前的根据样本数据选择字段类型已经给了你这些规则所依赖的类型。ICT 实操任务与证据检查器可帮助你为这类任务列出验收标准。
有些学生能背出各种检查的名称,却在被要求测试规则时失分。ICT 线上一对一补习的老师可以提供新的表格,并用不寻常的测试值检验你的条件。