您建议如何在MapC#标志枚举的值的列上强制约束?
下面是管理按位运算的一个很好的解决方案:SQL Server Bitwise behave like C# Enum Flags
另外,我想限制在此列中输入的值。枚举现在包含大约10个成员,将来可能会增加。
您建议如何在MapC#标志枚举的值的列上强制约束?
下面是管理按位运算的一个很好的解决方案:SQL Server Bitwise behave like C# Enum Flags
另外,我想限制在此列中输入的值。枚举现在包含大约10个成员,将来可能会增加。
2条答案
按热度按时间xa9qqrwz1#
如果您有一个包含10个数字的按位枚举,则它们的值将为1到512(2的幂)。因此,范围可以是0到1023。添加如下约束:
然而,我强烈警告不要这样做。关系数据库意味着允许以各种方式访问数据,并轻松地对数据运行查询。位运算符在SQL中效率不高。考虑一下您希望列出所有匹配标志的情况?使用枚举值创建一个查找表,并在源和查找表之间添加一个交叉引用表会更规范。
上面的示例将变为:
更多的表,但从长远来看更易于维护和查询。
falq053o2#
我不会约束一个按位字段,没有意义。如果它基于一个枚举的值,并且用户没有手动输入/编辑这个数据,那么就没有意义约束它。
至于性能,我和一位同事开始测试不同的方法,他用传统的方法,我用按位的方法。结果是,按位操作在大数据块上的性能优于传统的方法。传统的方法在大约16.7秒内返回结果,显示了相当大的查询计划,而按位操作只需0.6秒,计划要小得多。@Samuel Neff -如果在表上放置索引,则不涉及表扫描。