固定长度字符串
2003年8月11日
看看大多数在应用程序编程语言和关系数据库之间进行通信的库,你会注意到它们将数据库中的字符串类型(char 或 varchar)映射到编程语言中的字符串类型。简单明了,但也许是错误的。
我之所以质疑这一点,是因为 SQL varchars 是固定长度的,而大多数应用程序语言字符串可以处理任何长度。这会导致数据库更新时出现很多潜在问题,因为你始终存在更新数据库时字符串过长的风险。
解决此问题的一种方法是创建一个固定长度字符串类型,其中实例既知道长度又知道其值。这样,每当你将字符串值分配给它们时,它们就可以根据其长度进行检查。然后,这样的对象可以抛出异常或截断,或执行其他行为。实际上,过长输入字符串的行为可以添加到实例数据中。
使用这种类型可以使 UI 更好,因为 UI 字段小部件可以查询固定长度字符串的大小,并创建一个仅接受该大小输入的小部件。这是处理过长输入字符串最理想的方式,但只有在从数据库中获取信息时才有可能。通常,此类信息会丢失。
这个概念是更一般设计问题的具体示例。
- 隔离数据存储是好的,但你仍然必须遵守它对你施加的约束。
- 人们往往不愿意创建简单的值类型,因为他们经常可以使事情变得更容易(有关更多信息,请参阅 何时创建类型)
- 在 UI 中放置简单的验证会导致更友好的界面。诀窍是找到在不重复验证逻辑的情况下执行此操作的方法。
保存和验证字符串的对象可以做的不仅仅是长度检查。你可以包含诸如针对正则表达式进行检查之类的操作。但长度检查是一个简单的示例,它使处理数据库变得更容易。