如何设计用于模板化日志记录的数据库?

时间:2010-01-30 22:05:56

标签: c# asp.net sql logging

在我的Web应用程序中,我想记录某些用户交互等,例如“User ABC加入了Group XYZ”因此我想建立一个登录到Mssql数据库的日志记录机制。我现在正试图找到一个好的数据库设计来实现灵活性。

首先,我不想记录像“User ABC加入Group XYZ”这样的字符串。我想从模板中分离内容“ABC”和“XYZ”。所以我正在寻找一个模板化的日志数据库。

这样的事情:
:UserLog

IDLog int primary key
IDUserLogTemplate int foreign key
date datetime

UserLogTemplate

IDUserLogTemplate int PK
TemplateString varchar (like 'User {0} joined Group {1}')
IDUserLogType int FK

UserLogType

IDUserLogType int PK
Name varchar
Description varchar

表格 UserLogContent

IDUserLogContent int PK
IDLog int FK
PlaceholderPosition int (like '0')
Value varchar (like "ABC")

我认为这个数据库结构会给我足够的灵活性来添加/删除/编辑特定的日志类型(比如'用户ABC做了别的事情')。例如,我可能希望将某些信息添加到特定日志条目以供将来输入。因此,我创建了一个引用相同UserLogType的新UserLogTemplate。这就是我实现向下兼容的方式。

这是一个有效的数据库设计吗?你建议更好的设计吗?

2 个答案:

答案 0 :(得分:0)

我不仅仅是试图使用我的一个应用程序,但我开发了一个应用程序日志记录工具,它允许您存储自定义元信息以及各个日志条目。它使用CouchDB运行,这是一个面向文档的数据库(非关系型,这就是SQL Server所使用的),它可以更容易地存储和检索松散结构化的信息。

如果您有兴趣,请查看GitHub和/或给我发电子邮件。我很乐意帮助您开始使用它,也许它更适合这种“不那么结构化”的数据。

答案 1 :(得分:0)

我决定使用自己发布的数据库设计。