我知道这可能是一个"愚蠢"的问题.我之前创建了软件应用程序,然后将基本上所有变量初始化为字符串,并将它们作为VARCHAR保存在我的数据库中.然后,我会从数据库中收集它们并根据需要进行转换.有没有理由这不是一个有效的方法来初始化变量并将其保存在我的数据库中?
我知道对于非常大的应用程序,这可能会导致计算时间问题,因为我不必要地将可能已初始化的变量转换为适当的类型.但是,对于较小的应用程序,这是"好吗"吗?
1.最不惊讶.如果开发人员要从数据库中获取数值数据,他们会发现将它们存储为字符串会很奇怪.
2.开发人员方便.另一个问题是必须每次都将数据解析成正确的类型.如果你只是将它存储为正确的类型,那么你将省去人们不得不放的麻烦
int age = 0;
try {
age = Integer.parseInt(ageStr);
} catch (NumberFormatException e) {
throw new RuntimeException(e);
}
Run Code Online (Sandbox Code Playgroud)
遍布整个代码.
3.数据质量.上面的代码示例提示了第三个问题.现在,有人可能会在列中存储"no_age"或"foo"或其他内容,这是一个数据质量问题.处理错误的最佳方法是首先使它们变得不可能.
4.存储效率.存储效率也是一个因素.不同类型具有不同的数据编码方式,字符串不是存储数字,位等的有效方式.
5.网络效率.如果以浪费的格式存储数据,那么这通常会转化为不必要的网络利用率.这就是二进制格式通常比JSON或XML等文本格式更有效的原因.但是,Web服务通常不会将网络效率视为驱动工程问题.
6.加工效率.如果数据本质上是数字的,那么强制每个人解析它会产生处理成本.
7.不同类型支持不同的规则.在他的回答中,Hightower指出不同类型有特殊的排序规则,这会影响范围和排序.我喜欢这一点,因为它会影响实际的程序行为,而我上面提到的问题对于单个开发人员的小型应用程序来说可能更具学术性.
假设您要存储8位.如果您将其存储为字符串,则可能具有"TFFTFFTF",其在UTF-8和ASCII下将采用64位(8个字符x 8位/字符)来存储8位实际信息.相对而言,这是一个很大的不同.
顺便说一句,即使您的数据是数字,BIGINT例如,使用它也不好.数据库中不同类型的整数具有不同的存储要求,因此您应该考虑实际需要的位数,如果合适,使用无符号表示(没有理由在不能为负的数字上浪费符号位),等等当您创建现在必须是BIGINT的新外键时,错误的选择往往会快速增加,所有新行都有一堆BIGINT等等.您的存储和备份要求最终会变得不必要.
这些效率问题对于一些小问题可能并不重要,这就是你所要求的.或者可能有理由更喜欢低效格式而不是更高效的格式,正如我上面的JSON/XML示例所示.所以至于它是否"好",我无法回答这个问题,但希望上面的考虑为你提供一些工具来自己做出决定.
我仍然试图养成使用正确类型的习惯,但我当然不会出于某种原因而不顾一切地将事物存储为字符串.在bitset的情况下,我可以看到可能避免不得不处理位操作,这可能是棘手的,直到你得到它的悬挂.(但是有些数据库有特殊的bitset类型.)你提到不知道类型,在某些情况下这可能是合理的理由,尽管我更倾向于重构这里.
| 归档时间: |
|
| 查看次数: |
90 次 |
| 最近记录: |