假设我的状态为x,y,z,并且它们的b值都相同。 数据库模型(v1)如下所示:
项目表
ItemID CaseId ValueId(FK)
x 1 b
y 1 b
z 1 b
值表
ValueId Column3 Column4
b something something
再次,我需要检查数据库是否已经包含情况1的描述的(x,y,z)状态。此外,我将检索“ b”值并将其显示在应用程序中。 “难”的部分是我要么需要将itemID的数组传递给查询和/或存储过程,要么需要处理/检查.NET代码中的某些内容。
不同的方法:数据库模型(v2):
CaseId ValueId UniqueStateIdentifier
1 b 438290843209342
如果我可以将.NET代码中的状态x,y,z“转换”为唯一的标识符并将该值传递给查询,则这将使一切变得更加容易(并且性能会更好)。
UniqueStateIdentifier表示x,y,z(数组)。我已经阅读了几篇SO帖子和其他主题,并且GetHashCode()方法似乎不是解决问题/计算唯一标识符的有效候选人,并且将GetHashCode存储在数据库中是一种不好的做法。也可以使用MD5,但存在碰撞的风险,例如
public static long ComputeHash(this string input)
{
MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
byte[] hash = md5.ComputeHash(Encoding.ASCII.GetBytes(input));
return BitConverter.ToInt64(hash, 0);
}
注意:一个状态可以包含max。 10个项目,介于0和99.999.999之间的数字)。
综上所述,您对这个“问题”有何建议?和/或您能否指出创建标识符的正确方向,以减少冲突?
如果需要查看“情况1”是否具有这三个值,则可以使用聚合: