如何在DB中存储状态

时间:2011-11-26 19:47:27

标签: database-design

我的应用正在处理用户请求。每个请求具有以下状态:“从用户接收的请求的某些部分”,“接收的所有部分”,“开始处理”,“结果准备好”,“结果发送给用户”。 我想将请求状态存储在数据库中作为单个列。现在我有两个想法如何实现它:

  1. 使用字符串列。每个请求状态都存储为文本。对于     例如,发送给用户的请求将具有状态     “已发送”的价值。

    • (+)即使是不熟悉我的代码的技术人员也可以在查看数据库后了解请求发生了什么
    • ( - )为了存储请求状态,我使用多个字节,实际上这个信息可以存储在一个字节中(参见第2页)
  2. 使用整数列。每个请求状态都存储为int。例如,“从用户收到的请求的某些部分”= 1,“收到的所有部分”= 2,“开始处理”= 3,“结果准备就绪”= 4,“结果发送给用户”= 5。

    • (+)当你查看数据库时,你无法理解发生了什么。需要编写一个将整数转换为文本表示的代码。此外,当您突然决定,“结果已准备好”和“结果发送给用户”之间应该是“用户同意获得结果”的状态,您必须接受“用户同意获得结果”状态为6,而不是在“结果就绪”(4)和“结果发送给用户”(5)之间,这对我来说似乎有些不合逻辑。
    • ( - )使用尽可能少的空间
  3. 我发现当一个字节足够时,使用多个字节是没有意义的。我甚至同意编写转换代码(文本状态 - >整数状态,反之亦然)。但我应该怎样做突发中间状态?有不同的方法吗?

1 个答案:

答案 0 :(得分:1)

将数据存储为整数不必隐藏您的信息,您可以创建一个查找表,将整数常量与其文本值相关联,然后如果要查看数据的文本表示,请加入它们。

另一方面,除非您计划存储数百万行,或者每秒必须处理数千个事务,否则状态表中的额外几个字节可能不会产生太大差异。

当你说“突然的中间状态”时,我不确定你的问题的后半部分是什么意思。您是否担心以后必须添加更多状态,或者您是否正在讨论将状态从一个状态转换为下一个状态作为有限状态机中的状态?