在SQL-Server中代表“某物”数据的方法

5

Joe Celko (SQL大师)表示,我们不应该使用专有的数据类型,特别是应该避免使用机器级别的东西,比如位或字节,因为SQL服务器使用高级语言。基本上,数据建模的原则是数据抽象。所以对于像“IsActive”等字段的区分建议,什么样的数据类型才是正确选择?一个非常便携的并且可以被前端层清晰解析的数据类型。


2
是的,假设只有两个可能的值是“是”和“否”。 - Larry Lustig
1
在SQL Server中,我们可以使用BIT来实现存储优化。你可以将单词(varchar2)'True' 或者 'False' 存储起来,甚至可以使用整数类型(0、1)。但是这些方法的效率相对较低。对于这一点,我不同意Joe的观点。 - Jon Raynor
2
我想看一下你引用的文章。我怀疑它相当古老。在我看来,你应该将数据建模以适应实际情况。对于大多数人来说,“位”是一个真/假命题。我会在数据库中使用“位”,在应用程序代码中使用“布尔”。 - Yuck
1
SQL Server 中没有布尔数据类型。BIT 不是布尔类型,而是数值类型。 - nvogel
1
不幸的是,“BOOLEAN”既不是ISO SQL标准的核心功能,也不是必需的功能。更糟糕的是,三个主要的专业SQL产品都没有实现它。“BIT”是最接近的功能。 - RBarryYoung
显示剩余4条评论
2个回答

4
在SQL Server中,我会选择使用BIT数据类型,因为它符合您描述的抽象要求:它可以有2个值(根据广泛使用的约定,映射为Yes = 1和No = 0)。如果需要,它还可以具有附加的NULL值。 如果可能,使用本机数据类型具有性能、清晰度和易于理解的所有好处。更不用说保持简单而不过分复杂化事物的原则了。

3
SQL Server没有布尔数据类型,因此布尔不在考虑范围内。BIT是一种数字类型,可以接受值0和1以及null。我通常更喜欢带有CHECK约束的CHAR类型,允许像"Y"/"N"或"T"/"F"之类的值。如果需要,CHAR至少可以让您将值集扩展到超过两个。 BIT的潜在缺点是它不是标准的,对SQL Server用户来说并不特别友好,甚至连Microsoft自己的产品也会以不一致的方式处理BIT。 SQL Server中BIT的语义非常奇怪。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,