【问题标题】:Create unique identifier that is a recognisable child of a parent identifier创建唯一标识符,它是父标识符的可识别子标识符
【发布时间】: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


【解决方案1】:

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

如果您希望它是人类可读的,那么制作一个应用程序,显示父母和孩子之间的关系。

我可以链接到说这是实际使用的来源吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-26
    • 2011-03-16
    • 2014-03-05
    • 2012-06-02
    • 2012-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多