状态(唯一)标识符

假设我的状态为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之间的数字)。

综上所述,您对这个“问题”有何建议?和/或您能否指出创建标识符的正确方向,以减少冲突?

评论
quia_a
quia_a
我需要检查数据库是否已经包含案例1的描述的(x,y,z)状态。

如果需要查看“情况1”是否具有这三个值,则可以使用聚合:

select (case when count(distinct itemid) = 3 then 'Yes' else 'No' end) as has_all_three
from items i
where caseid = 1 and itemid in ('x', 'y', 'z')
点赞
评论