在数据库中,不论是关系型数据库还是大数据等,面对数据类型选择的时候ABC原则都适用。
ABC原则,即Appropriate(合适的)、Brief(消耗最少的资源)、Complete(数据不可丢失)帮助我们更好地选择数据类型。
Appropriate(合适的)
选择合适的数据类型是确保数据存储和检索效率的关键。不同的应用场景和数据特性需要不同的数据类型。
常见的错误是:将明明是int类型的数据存储成varchar类型,因为varchar能包罗万象。但是这样做不仅在理解上造成困扰,还对数据的存储空间,检索效率都造成了一定的负面影响。
在选择合适的数据类型时,还需要考虑数据的精度和范围,以避免浪费存储空间或造成数据截断。
Brief(消耗最少的资源)
数据库系统的性能直接受到数据类型选择的影响。为了确保系统的高效运行,应选择消耗最少资源的数据类型。
例如:
1. 在存储日期和时间信息时,使用TIMESTAMP而不是CHAR(19),因为TIMESTAMP在存储和检索时消耗更少的存储和计算资源。
2. 避免过度使用大型数据类型,例如使用VARCHAR(4000)来存储最大长度为100的字符串。这种不恰当的选择会导致存储资源的浪费,并可能降低查询性能。在保证数据准确性的前提下,选择适当大小的数据类型是关键的。
3. 在整数类型上也可以选择尽量小的数据类型,例如对单个数字可以使用tinyint,而不是int
如mysql中的整型数据类型,ps: mysql的设计规范可以参考另一篇博文:MySQL设计和开发规范
整型 | 占用字节 | 范围 | 范围 |
tinyint | 1 | -27~27-1 | -128~127 |
smallint | 2 | -215~215-1 | -32768~32767 |
mediumint | 3 | -223~223-1 | -8388608~8388607 |
int | 4 | -231~231-1 | -2147483648~2147483647 |
bigint | 8 | -263~263-1 |
4. 如果数字确保是正数或0,可以使用 unsigned 标识,unsigned相对于signed可以多出一倍的存储空间,如 signed int -2147483648~2147483647 , unsigned int 0~4294967295
Complete(数据不可丢失)
数据完整性是数据库设计的一个基本原则。
例如
1. 在存储金额或货币值时,使用DECIMAL而不是浮点数类型,以避免由于浮点数的精度问题导致的金额计算错误。
2. 对于必填字段,应该选择不允许NULL值的数据类型,以确保数据的完整性。
通过ABC原则确保数据类型的合适性、经济性和完整性,可以为数据库系统的性能和可靠性做出积极的贡献。