我需要为表生成一个合理随机的唯一键.它应该类似于MYSQL的GUID.我尝试过UUID,但看起来只有前几个字符实际上是随机的 - 其余的每次插入时都是一样的.
基本上,即使您已经在列中具有一个已知值,也希望此关键字段很难猜测.
执行此操作的最佳方法是什么,以及如何设置字段数据类型以有效地存储值?
谢谢,史蒂夫
有关
与我的其他问题相关:
数据设计
假设我有一个标签表:
tblTags
-------------
TagID (int)
Name (string)
Run Code Online (Sandbox Code Playgroud)
还有两个内容表:
tblBlogs
-------------
Anchor (GUID, Primary Key)
BlogTitle (string)
+ More custom fields
tblTutorials
-------------
Anchor (GUID, Primary Key)
TutorialTitle (string)
+ More custom fields
Run Code Online (Sandbox Code Playgroud)
还会有更多带有锚点的表格,它不仅仅是2.
然后将标签与上述实体相关联:
tblTagAnchors
-------------
TagID (int, Foreign Key)
Anchor (GUID, Foreign Key)
Run Code Online (Sandbox Code Playgroud)
我的问题是,一旦我建立了博客和教程与特定标签的关联,有没有办法编写一个查询来返回带有特定标签的博客或教程?无需对博客和教程进行单独查询?
主要用途是搜索,类似于(伪):
select from tblBlogs and tblTutorials where the GUID exists in tblTagAnchors where tagID = 5
for each record returned
if record from Blog
response.write("<a href=blogView.aspx?ID=" + recID)
else if record …Run Code Online (Sandbox Code Playgroud) sql database-design guid foreign-keys foreign-key-relationship
我正在创建一个应用程序,我想尝试使用GUID.我首先使用实体框架代码和LINQ,所以我认为最简单的方法是使用
string guid = Guid.NewGuid().ToString();
var acc = new v_Account();
acc.v_AcctGuid = guid;
Run Code Online (Sandbox Code Playgroud)
然后将我的GUID存储为数据库中的类型字符串.这是一种不好的做法吗?GUID真的只是一个全局唯一的随机生成的字符串吗?
我很确定它会起作用,但我不想在未来遇到问题或通过这样做造成漏洞.
我正在寻找一种算法,该算法生成适合于两者的标识符,例如URL中的外部使用以及具有以下要求的持久性:
我查看了各种解决方案,但我发现的所有解决方案都有一些重要的权衡.例如:
编辑:为什么这个被标记为偏离主题?这些要求描述了可以提供许多合法解决方案的特定问题.事实上,这里的一些解决方案非常好,我正在努力选择一个标记作为答案.
我想将此方法中的foreach转换为linq表达式.我有2次尝试/捕获因为我不能总是指望在guid或guidToFind列表中传递的字符串是有效的guid字符串.
public static bool IsGuidInList(List<string> guids, string guidToFind)
{
try
{
var guid = new Guid(guidToFind.Trim());
foreach (var g in guids)
{
try
{
var g2 = new Guid(g.Trim());
if (g2 == guid)
return true;
}
catch {} // swallow exception
}
}
catch{} // swallow exception
return false;
}
Run Code Online (Sandbox Code Playgroud) 我正在研究一个函数,其主要目的是为应用程序的每个用户生成一个唯一的 ID,有人可以向我解释该函数的工作原理。
guid: function() {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);
return v.toString(16);
});
},
Run Code Online (Sandbox Code Playgroud)
我需要解释replace(/[xy]/g){即这是什么意思},而不是什么(r&0x3|0x8)意思。
注意:这不是关于数据库设计,也不是关于GUID的一般用法.这是关于在Microsoft SQL服务器上确定性地为测试数据创建这样的GUID.
我们正在将数据库从整数标识符迁移到uniqueidentifier数据类型.
出于测试目的,我们希望将测试数据集迁移到已知的GUID值,确定性地基于我们以前的整数值
UPDATE Unit
SET UnitGuid = NEWID(UnitId)
Run Code Online (Sandbox Code Playgroud)
显然这不会马上起作用.如何使用UnitId创建确定性GUID?
我有以下内容:
var nodes = _nodeService.GetNodeChildren(id, nId);
var association = _nodeService.GetNodeOrder(id, nId);
var joinedNodes = nodes.Join(association,
n => n.Id,
a => a,
(n, a) => new {nodes = n, association = a};
var enumerable = joinedNodes.ToList();
var orderedNodes = enumerable.OrderBy(x => x.association);
return orderedNodes.nodes;
Run Code Online (Sandbox Code Playgroud)
其中,节点是对象列表,关联是 GUID 列表。
问题是我没有按预期收到订单。
我需要根据 GUIDS 位置的顺序返回节点列表。
以下是部分测试代码
_ngOrder = new List<Guid>
{
_nodeId2,
_nodeId1,
_nodeId4,
_nodeId3,
}
_nodeClient.SetNodeOrder(_ngOrder);
Run Code Online (Sandbox Code Playgroud)
当我得到方法并断言这里是代码:
Assert.That(_response[0].Id, Is.EqualTo(_node2Id);
Assert.That(_response[1].Id, Is.EqualTo(_node1Id);
Assert.That(_response[2].Id, Is.EqualTo(_node4Id);
Assert.That(_response[3].Id, Is.EqualTo(_node3Id);
Run Code Online (Sandbox Code Playgroud) 如果我尝试使用“工具”>“创建 GUID”来使用“创建 GUID”工具,我会得到一个包含六个不同片段的框,其中包含 GUID。但它不提供仅提供 GUID 的选项。有没有办法做到这一点?
我使用的是 Visual Studio Professional 2019 版本 16.1.6 和 .NET 版本 4.8.03761。
我想复制一个sqlserver表行并插入到这个表self中,这个表有这个字段:
Id :uniqueidentifier
ParentId: uniqueidentifier
Name: varchar(50)
Sort: float
UserId: uniqueidentifier
Run Code Online (Sandbox Code Playgroud)
Id和ParentId现有关系.
我提出了一个解决方案:
Insert into table1 (Id, ParentId,Name,Sort)
Select dbo.gen(id,1) as id, dbo.gen(ParentId,1) as ParentId ,Name,Sort from table1
where UserId='XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'
Run Code Online (Sandbox Code Playgroud)
gen函数是从给定GUID生成新GUID的方法
follow是一个C#描述,我们可以在CLR SQL Server用户定义函数中使用:
public Guid GenerateNewGuid(Guid from,int seed)
{
return .....
}
Run Code Online (Sandbox Code Playgroud)
请帮我,我该如何实现这个功能?
如果您对我的情况有其他解决方案,请告诉我
问候.
吉姆
guid ×10
c# ×5
sql ×4
linq ×3
.net ×2
algorithm ×1
cassandra ×1
foreach ×1
foreign-keys ×1
identifier ×1
javascript ×1
mysql ×1
random ×1
security ×1
sql-server ×1