小编zer*_*law的帖子

使用 GUID 作为外键可以吗?

这是我目前的情况:

我们有一个表格存储从网站表单提交的数据,比如“MyTable”。该表使用 bigint(自动增量)作为主键。到目前为止一切都很好。

现在,该表需要能够存储从移动设备上传的记录。但从手机上传的记录要先经过验证,然后才能存储到“MyTable”中。因此,创建了一个临时表,比如“Temp_MyTable”。

换句话说,这是流程:

移动设备 ------> 临时表 ------> 实际表

                    [GUID as PK]         [bigint as PK], [GUID as FK]
Run Code Online (Sandbox Code Playgroud)

问题是,临时表使用 GUID 作为主键。原因,我们必须引用从多个设备上传的记录。用户修改后可重新上传记录。注意:这里的 GUID 是由移动端生成的(简单的 javascript)。

所以,现在,我想将 Actual Table 的记录引用回 Staging Table。在这种情况下,“可能”需要外键。不幸的是,它是 GUID 数据类型。

而且看了多篇文章,似乎使用GUID作为外键可能是不利的——存储更多或更慢。

我想知道,使用 GUID 作为外键可以吗?有人可以证明它实际上“非常好”吗?或者有更好的设计吗?

foreign-key sql-server uuid

6
推荐指数
1
解决办法
1万
查看次数

Sql Server - 如何将审计日志转换为表?

我使用的是 Sql Server 2014 标准版。我的目标是跟踪对表的操作历史(插入、更新、删除),并显示在网络上,以便用户能够知道过去数据发生了什么。

因此,我开始知道 Sql Server 标准版中部分支持审计功能,并且能够记录一些操作,如附件所示。

在此处输入图片说明

我的问题是,如何将这些日志存储在适当的 Sql 表中,以便可以在网页上访问、检索和显示这些记录?

目前,允许的审计目标:文件、安全日志、应用程序日志......似乎无法直接从 ASP.NET API 检索。

是否可以登录到 SQL 表?

PS:

(如果我错了,请纠正我)。许多人说标准版只允许服务器级审计,但不允许数据库级审计。但是,由于一些未知的原因,如果我添加了这 7 种审计类型(是的,7 种或无),我就能够捕获和查看数据库级别的操作。

在此处输入图片说明

sql-server audit standard-edition

3
推荐指数
2
解决办法
7109
查看次数

是否需要索引短字符串代码以加快查询速度?

我们有大量用于设置表格的表格。在每个表格中,都需要填写CodeDescription

代码由varchar(10)数据类型组成。

现在,问题是,每次用户创建新数据或更新数据时,都需要检查是否Code与其他人发生冲突。

在 LINQ 中,这种代码检查是不可避免的:

string ExistingCode = "ITEM01";
int ExistingKey = 1;

var recordWithConflictedCode = (from a in db.MyTable
                               where a.Code == ExistingCode && 
                               a.Key != ExistingKey).ToList();

if(recordWithConflictedCode.Count >= 1)
    return BadRequest("Duplicated Code found");
Run Code Online (Sandbox Code Playgroud)

现在,由于这涉及对每个进程的字符串比较,我认为对列Code进行索引以使查询更快是有意义的。

这对你们来说是一种常见的做法吗?

index sql-server linq

3
推荐指数
1
解决办法
85
查看次数

标签 统计

sql-server ×3

audit ×1

foreign-key ×1

index ×1

linq ×1

standard-edition ×1

uuid ×1