我正在为新项目设计数据库,我不确定是否应该使用INT,CHAR或VARCHAR作为员工的社会安全号码。在我的国家,SSN由11位数字组成。
请注意,我将在此表中使用ID列作为主键,因此SSN不会被用作密钥。
INT注意事项:它无法在列上错误地存储文本,这很好,但我无法确保插入的值具有正确的位数。
CHAR注意事项:我可以确保条目的数字位数正确,但我无法确定这些数字是否为数字,并且SSN的长度将来可能会增加。
VARCHAR注意事项:不具备其他两个方面的任何好处,但却是最灵活的方法,例如,如果长度发生变化,则不会受到影响。< / p>
SSN是否有标准数据类型?你们用的是什么?
答案 0 :(得分:8)
虽然SSN只是数字,但它不代表一个数字。你不会在整个SSN上进行任何数值计算,因此将它存储为数字并没有多大意义。
将其存储为数字会占用更少的空间,但不会太多,因为您需要bigint
(8个字节)来保存11位数字。使用varchar
将使用11个字节作为字符,使用另一个字节作为长度,因此差异不足以激励将其存储为数字。
关于验证SSN的长度和内容,这实际上是用户界面的工作。数据库不应该允许任何损害数据完整性的内容,但是无效的SSN不会以这种方式造成伤害。
我会使用varchar
,因为它提供了您提到的灵活性。