我将要创建一个审核表,该表基本上记录3个事件(目前)。创建用户,用户登录事件(成功)和失败的用户登录事件。
我的想法是一个非常简单的表。
CREATE TABLE AccountAuditLog (
Id INT NOT NULL IDENTITY(1,1),
UserId UNIQUEIDENTIFIER NOT NULL,
IPAddress VARCHAR(15) NOT NULL,
EventType VARCHAR(15) NOT NULL,
EventDescription VARCHAR(20) NOT NULL,
EventTimestamp DATETIME2 NOT NULL,
CONSTRAINT PK_AccountAuditLog PRIMARY KEY (Id),
CONSTRAINT fk_AccountAuditLog_Account FOREIGN KEY (UserId) REFERENCES Account (Id)
)
我们通常将UNIQUEIDENTIFIERs用作ID,但我对Id INT的推理是,它只是简单地自动递增,从而提供了一些信息(是的,我们可以使用DateTime来计算顺序,但是行将按顺序写入吗? )。
在审核日志中使用IDENTITY列是否有问题?我想不到一个。
然后是显示用户登录计数的要求。我不希望在“帐户”表上没有一个名为LoginCount的字段。相反,我只想做一个COUNT(),其中UserId = Id。如果我在UserId上有一个索引-我相信即使有大量数据,这也将非常有效。这是一个愚蠢的计划,还是比每次登录都会增加的“帐户”表中的字段更合适?
答案 0 :(得分:0)
是的,如果您将在表上创建主键,那么这将是管理数据短路的更好方法。 对于登录数,您应该使用以下查询,
SELECT COUNT(1)
FROM AccountAuditLog
WHERE UserId = ? and EventType = ?
但是,请确保您应该对where子句中的列进行索引。