创建一个独特的标识符,它是父标识符的可识别子级。

3

在创建一组由GUID标识的元素时,我选择使用与其父元素和兄弟元素ID共享前12个字符(6个字节)的子元素。

例如:

Parent Id: df2f5d11-0b66-4407-8cf4-8877b954a273
Child Id: df2f5d11-0b66-349b-8527-1a6a79d2efce

我知道很多模型都使用类似的机制来处理相关实体,所以我想知道是否存在可识别唯一标识符的规定最佳实践或约定。

我的实现如下:

var childId = new Guid(parentId.ToByteArray().Take(6).Concat(Guid.NewGuid().ToByteArray().Take(10)).ToArray());

-- 这对我来说有点笨拙,如果许多系统使用类似的机制。

有更好/更干净/更简单的方法吗?


1
你确定在其他父级上不会看到相同的6字节前缀吗? - Will A
不,显然这种情况可能发生,但在这种情况下并不是什么大问题。约定只是为了人类可读性,子实体实际上使用整个父ID引用它们的父级。 - grenade
@grenade - 很好,所以这是为了人类可读性而不是试图(重新)强制父子关系。你的担忧是你最终会在各个地方得到相同的代码,这是低效的,还是其他方面的问题困扰着你? - Will A
实际上,当我考虑这种方法时,惊讶地发现 System.Guid 上没有一个构造函数可以接受一个父 ID。只是我怀疑其他人是否使用过类似的方法,并希望有更标准化的实现方式。 - grenade
1
为什么?你没有一个ChildTable.ParentId FK字段已经将它们链接在一起吗? - JK.
@grenade - 缺少这样的构造函数意味着你所做的不是常规操作。Guid的父级概念并不自然 - Guid类用于生成GUID,而这些GUID没有父级。JK的评论很好 - parentID字段应该是你所需要的全部内容。 - Will A
1个回答

1

我认为对GUID中字节的任何操作都会导致唯一和全局部分的破坏。

如果您希望这些内容可读性强,那么可以开发一个应用程序,显示父子关系。

请问是否有相关来源证明这种方法实际被使用?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接