我可以在Guid中存储额外的数据吗?

时间:2014-04-10 11:49:04

标签: c# .net string guid

我们可以使用字符串值在C#中实现自定义GUID,并再次从GUID解析中获取自定义字符串数据吗?这可能听起来不太实际,但只是了解过程及其缺点。

假设我们有一个数据库表 CUSTOMER ,其中 Cust_Data 列为uniqueidentifier数据类型。从C#开始,我们创建了生成GUID并放入DB表的方法。例如

public Guid GetCustomGuid(Guid guidValue , string customerData)
{
 // Method implementation
 // Create New GUID as ==> guidValue + customerData;
 return //Guid created
}

生成GUID后,我们再次从数据库解析GUID并获取客户数据。

public string GetCustomData(Guid GuidFromDB)
{
  // Method implementation for parsing the guid.
  // fetch the custom data from GuidFromDB.
  // Every GUID received is always unique with respect to customer  data.
  return //CustomerData;
 }

我不知道,如果需要,我是否将问题写成确切的背景,请进行编辑。

2 个答案:

答案 0 :(得分:4)

uniqueidentifier 类型的列可以存储16个字节。这通常不足以为额外数据留出空间,并且当然无论如何都不适合确保一旦您开始从Guid中删除字节以腾出空间,该列仍然是唯一的。当你这样做时,guid中没有GU,它不再保证是全球唯一的。你得到的随机索引碰撞当然非常不愉快。

没有意义,只需在表格中添加一个额外的列。也许你想要一个聚集索引,但问题并不清楚。

答案 1 :(得分:1)

不这样做的一个最大原因是,如果GUID与某些客户数据相关,并且您更改了该数据,则更改Guid。这会破坏数据库中的referential integrity。行标识不支持包含有关行的数据,仅包含行与其他行的关联。