优化错误消息

时间:2015-12-01 23:42:14

标签: c# database-design

我想知道存储错误消息的最佳方法是什么,而不是数据库中的200个字符以上,并且所述错误消息可以包含不同的参数。

使用参数格式化消息并将其直接插入数据库

是否更好?

OR

将带有错误代码的参数存储在数据库中,让应用程序确定错误代码和参数发送的消息是什么?

应用程序输出:

Error 36 : This is a test error message that can last forever.... 
          {I might insert a date and some other parameters here...}
           and continue the endless message

数据库方:

案例1

Table ErrorMessage
ErrorCode | Message                                          
36        | This is a test error message that can last...date + RandomParameter

案例2

Table ErrorMessage
ErrorCode | Date      | AdditionalInfo
36        | 2015-12-23| RandomParameter

哪个更有效率?

编辑: 这些消息将在以后搜索到。它可以是查看特定用户是否有很多错误并帮助他解决这些问题,或者它可能是一个管理错误消息,其中某些内容在应用程序中发生了变化,并且与某个用户发生冲突。它将记录在数据库中,并且需要在用户联系管理员时进行搜索。

2 个答案:

答案 0 :(得分:1)

从评论中可以看出,合理的人可以对此有不同的看法。我认为这是因为它只能解释。

此外,您要求" best"和"效率最高" - 这始终是一个上下文问题,它取决于你想要优化的内容。

但是,我认为以下陈述是正确的。

您的应用程序有一个名为"错误"的域概念。 错误具有类型,可用于对错误进行分类。 错误可能包含有助于理解和传达错误的其他信息。 每种错误类型可能具有不同的附加信息。 附加信息结构松散 - 它不符合传统的关系模式。 对于每次出现的错误类型,附加数据的内容都会更改,但其结构不会更改。

如果这一切都是真的,那么我建议最关键的""这个模型是:

ErrorTypes
------------
ErrorTypeID (PK)
ErrorTypeDescription

ErrorOccurrence
-----------------
UserID
Date
ErrorTypeID (FK)
AdditionalInformation (JSON, XML, whatever)

答案 1 :(得分:1)

你所有的观点都有价值。这两种方法都有优点和缺点。

  • 您可以存储两者。这提供了两者的优点,唯一的缺点是增加了存储空间。

  • 如果您不选择同时存储,请存储格式完整的信息。原因是如果与数字关联的消息随新版本更改,您可能需要查看记录时的消息。

  • 如果您有特定需要能够查询参数,请执行此操作。但 YAGNI适用。不要因为你以后认为你可能会这样做。您可以稍后使用正则表达式提取它们。

对我而言,YAGNI的考虑是决定性的。除非你有一个具体的理由,今天做其他事情,做最符合要求的事情。这可能是存储完整的消息。