审核表的主键和数据类型

时间:2019-02-12 03:44:36

标签: sql sql-server

我将要创建一个审核表,该表基本上记录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上有一个索引-我相信即使有大量数据,这也将非常有效。这是一个愚蠢的计划,还是比每次登录都会增加的“帐户”表中的字段更合适?

1 个答案:

答案 0 :(得分:0)

是的,如果您将在表上创建主键,那么这将是管理数据短路的更好方法。 对于登录数,您应该使用以下查询,

SELECT COUNT(1)
FROM AccountAuditLog
WHERE UserId  = ? and EventType = ?

但是,请确保您应该对where子句中的列进行索引。