【发布时间】:2011-08-25 11:48:04
【问题描述】:
在创建一组由 guid 标识的元素时,我选择使用与其父元素 ID 和兄弟元素 ID 共享其 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());
——如果很多系统都使用类似的机制,这让我觉得有点笨拙。
有更好/更清洁/更简单的方法吗?
【问题讨论】:
-
您确定不会在另一个父节点上看到相同的 6 字节前缀吗?
-
不,显然它可能会发生,但在这种情况下,这没什么大不了的。该约定只是关于人类可读性,子实体实际上使用整个父 ID 引用其父。
-
@grenade - 足够公平,所以这是为了人类可读性,而不是试图(重新)执行父子关系。您是否担心最终会在所有地方使用相同的代码、效率低下,或者这种方法是否有其他问题困扰您?
-
实际上,当我想到这种方法时,我很惊讶 System.Guid 上还没有一个使用父 id 的构造函数。只是我怀疑其他人没有使用类似的方法,并希望有一个更标准化的实现。
-
为什么?您还没有将两者链接在一起的 ChildTable.ParentId FK 字段吗?
标签: c# guid entity-relationship uniqueidentifier