字段类型(field type) 告诉数据库一个字段可以存放什么样的值:文本、整数、小数、货币、日期或是/否。选择的方法是查看样本数据,并问自己这些值将被用来做什么。每当实操题给你一张表要建立,或一份数据文件要导入时,就会用到这项技能。
所选的类型决定三件事:数据库接受什么、值如何排序、计算能否进行。选错的后果很少立刻出现错误提示,而是稍后以排序错乱或开头的零消失的形式出现。本页属于数据库结构与验证。
如何从样本数据判断类型?
先从该列读取三四个真实的值,然后依次回答下面的问题。
- 答案只有真或假吗? 如果每个值都是两种状态之一,就用布尔(是/否)字段。
- 是日期或时间吗? 用日期字段,这样排序按日历而不是按字母。
- 要拿来计算吗? 数量和计数适合整数字段。带小数的金额适合小数或货币字段。
- 虽然由数字组成,其实是标签吗? 用文本。编号、电话号码、邮编和身份证号都是标签。
好习惯是留意开头的零、连字符、字母或空格。其中任何一项都强烈暗示该字段是文本。
例题详解
一家虚构的学校书店(为本课编造)保存库存记录。样本行如下:
| StockCode | Title | Price | Quantity | DateReceived | Fragile |
|---|---|---|---|---|---|
| BK-045 | Science Notebook | 8.90 | 120 | 2025-02-03 | No |
| BK-046 | Atlas Pocket Edition | 24.50 | 35 | 2025-02-03 | Yes |
| ST-007 | Gel Pen Set | 6.00 | 300 | 2025-02-10 | No |
StockCode: 像 BK-045 这样的值含有字母和连字符,也没有人会把编号相加。使用文本。
Title: 只有文字。使用文本。
Price: 像 8.90 这样的值有两位小数,还要乘以数量。使用货币(currency)或小数(decimal)。
Quantity: 120、35、300 是整件物品,会被计数和汇总。使用整数(integer)。
DateReceived: 每个值都是按年-月-日书写的日历日期。使用日期(date)。
Fragile: 只出现 Yes 或 No。使用布尔(是/否)。
快速核对 Price 列:三个价格相加,8.90 + 24.50 + 6.00 = 39.40。货币或小数字段可以直接完成这个求和。再验算一次:8.90 + 24.50 = 33.40,33.40 + 6.00 = 39.40。
要留意的错误
常见的失误是因为电话号码看起来是数字,就选了数值类型。
错误选择: Phone = 数字。输入的值是 虚构的 01X-XXXXXXX。
数字字段放不下连字符;如果不打连字符,开头的零会被去掉。以零开头的号码可能丢掉那个零,变成另一个更短的值,也拨不通。
改正的方法是问”我会把这些值相加或求平均吗?“电话号码通不过这个测试,所以字段必须是文本。同样的道理适用于邮编、会员编号和身份证号。
自我检测
为每一列判断字段类型并说明理由。
1. 一列邮编,如 08000 和 50450。
查看答案
文本。 邮编是标签而不是数量。08000 开头的零在数字字段里会丢失。
2. 一列名为 AmountPaid 的数据,值为 45.50、30.00 和 12.75。
查看答案
货币或小数。 这些值带小数,并且要相加得到总额。
3. 一列名为 Returned 的数据,值为 Yes、No、No、Yes。
查看答案
布尔(是/否)。 只有两种可能的状态,所以数据库可以拒绝任何其他输入。
下一步
当你能根据样本数据说明理由后,继续学习定义主键与验证条件,再用数据库结构与验证练习题组检测整个单元。只读 SQL 练习实验室和 ICT 实操任务与证据检查器能让你在虚构数据上观察字段类型的表现。
有些学生在熟悉的表格里能选对类型,但遇到不寻常的数据就开始怀疑自己。ICT 线上一对一补习的老师可以出新的表格,请你大声解释每个选择。