代表是;“什么?”;SQL Server中的数据

代表是;“什么?”;SQL Server中的数据,sql,sql-server,database-design,Sql,Sql Server,Database Design,Joe Celko(sql专家)说,我们不应该使用专有的数据类型,特别是避免使用机器级的东西,如位或字节,因为sql Server使用高级语言。数据建模的基本原理是数据抽象。因此,如果对“IsActive”等字段的上述建议有所区别,那么对于数据类型,正确的选择是什么呢?数据类型是非常可移植的,并且前端层可以清楚地对其进行解码?谢谢 在SQL Server中,我会选择BIT数据类型,因为它符合您描述的抽象需求:它可以有2个值(通过广泛使用的Yes=1和No=0约定映射为Yes和No)。如果需要,它

Joe Celko(sql专家)说,我们不应该使用专有的数据类型,特别是避免使用机器级的东西,如位或字节,因为sql Server使用高级语言。数据建模的基本原理是数据抽象。因此,如果对“IsActive”等字段的上述建议有所区别,那么对于数据类型,正确的选择是什么呢?数据类型是非常可移植的,并且前端层可以清楚地对其进行解码?谢谢

在SQL Server中,我会选择
BIT
数据类型,因为它符合您描述的抽象需求:它可以有2个值(通过广泛使用的Yes=1和No=0约定映射为Yes和No)。如果需要,它可以有一个额外的空值


如果可能,使用本机数据类型具有性能、清晰性和可理解性等所有好处。更不用说在可以保持简单的情况下不过度复杂化的原则了。

SQL Server没有布尔数据类型,所以布尔是不可能的。位是一种接受值0和1以及null的数值类型。我通常更喜欢带有检查约束的CHAR类型,该约束允许诸如“Y”/“N”或“T”/“F”之类的值。如果愿意,CHAR至少允许您将值集扩展到两个以上


BIT有一个潜在的缺点,即它是非标准的,对用户不是特别友好,甚至SQL Server用户也不能很好地理解它。BIT的语义在SQL Server中非常独特,甚至微软自己的产品也以不一致的方式处理BIT。

是,假设只有两个可能的值是“是”和“否”。@Jarvis。如果您的数据库支持
boolean
,听起来是个好主意。并非所有人都这样做。如果您的问题是:“我想在一个特定的数据库中表示布尔标志。最好的方法是什么?”--然后用您正在使用的数据库标记该问题。对于SQL Server,您可以使用一点,以增加存储优化的好处。您可以存储单词(varchar2)“True”或“False”,甚至可以使用整数类型(0,1)。但这些效率较低。我不同意Joe对SQL Server的看法。我想看看你引用的文章。我怀疑它相当旧了。我想你应该对数据进行建模,使之符合实际情况。对大多数人来说,
是一个正确/错误的命题。在数据库中使用
bit
,在应用程序代码中使用
Boolean
。SQL Server中没有Boolean数据类型。位不是布尔值,而是数字类型。