C# 以DB为单位存储无限/最大值的最佳实践

C# 以DB为单位存储无限/最大值的最佳实践,c#,sql,vb.net,C#,Sql,Vb.net,我有几个场景需要存储无限值(或者最大值,不管你怎么称呼它),这表示业务中没有限制 我考虑了几个选择: 将字段设为NULL,并使用DB NULL表示这种情况。但问题是我必须在任何需要进行比较或显示的地方检查它 使用给定类型的实际最大值(例如,integer,我可以使用最大的Int32值),但这需要在DB级别进行一些调整-我必须在字段中写入一个约束(因为我可以使用固定长度的decimal或integer DB type)来限制最大值,这可能对业务也没有意义 使用预定义的大值(可能对业务有意义)表示

我有几个场景需要存储无限值(或者最大值,不管你怎么称呼它),这表示业务中没有限制

我考虑了几个选择:

  • 将字段设为NULL,并使用DB NULL表示这种情况。但问题是我必须在任何需要进行比较或显示的地方检查它

  • 使用给定类型的实际最大值(例如,integer,我可以使用最大的Int32值),但这需要在DB级别进行一些调整-我必须在字段中写入一个约束(因为我可以使用固定长度的decimal或integer DB type)来限制最大值,这可能对业务也没有意义

  • 使用预定义的大值(可能对业务有意义)表示它并将其存储在DB级别,同样,我必须向DB字段写入约束

我以前在不同的场景中使用过所有这些方法,它们都不是很糟糕,但是你知道,处理一些特定的案例是一件痛苦的事情

我的问题有点宽泛:你们对此有什么建议?有哪些良好/最佳做法可用


欢迎提供任何帮助/建议

我认为将其存储为一个单独的列,
IsXyzUnlimited
,可能是一种很好的替代做法

因为它并不意味着null,所以最好将它表示为null。正如您所提到的,在调用它之前还存在检查它的问题


另外,正如您所提到的,其他两个值可能具有商业意义。如果您希望数据能够自我揭示业务,请明确地说“嘿,业务,勾选此框时,这件事是无限的”。没有魔法值。

如何在C代码中引用此值?我通常在两个位置使用此类值:显示和计算。对于显示,它应该被屏蔽为“Unlimited”,对于计算,我使用一个巨大的数字(如果它是DB NULL)或实际的大值(选项2和3);有时,它还用于存储过程中的报告目的(因此它也是“无限”文本),最好显式地处理无穷大的情况,而不仅仅是使其成为一个大数字。您的代码可能会更容易理解(即使它可能更容易编写)。唯一的问题是我能想到的是它可能会与另一个字段的值混合,如果其他人没有仔细处理它,例如,一些报表可能会查询超过某个限制的记录,这个带IsUnlimited的应该在中,查询会有点复杂。什么实际的商业案例涉及无限大的价值?@PrestonGuillot,例如——美国国债