代码之家  ›  专栏  ›  技术社区  ›  Craig

审核表的主键和数据类型

  •  0
  • Craig  · 技术社区  · 6 年前

    我将要创建一个审计表,基本上记录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来计算顺序,但行将按顺序写入?).

    在审核日志中使用标识列有问题吗?我想不出一个。

    然后,要求显示用户的登录计数。我不希望在account表中有一个名为logincount的字段。相反,我只想在userid=i d的地方做一个count(),如果我在userid上有一个索引,我相信即使有大量的数据,这也是非常有效的。这是illy计划,还是比每次登录时get递增的account表中的字段更适合?

    1 回复  |  直到 6 年前
        1
  •  0
  •   JERRY    6 年前

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

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

    但是,请确保在列上有一个索引,这些列在where子句中。