我可以为NULL设置一个可选值的列吗?

时间:2012-06-20 06:15:58

标签: sql sql-server

我正在使用SQL Server数据库,我正在开发一个房地产网站。

我有一个表格,列出了名为SIZE的列的属性。

用户可以选择为属性输入SIZE值(仅限整数和正数)。

目前我正在使用此

int   Size   NULL

我想知道:

  • 如果在这种情况下NULL值是有意义的(我读了一些不鼓励使用NULL的文章,所以我希望如果是这样的话)
  • size的值应该是0到100000,我想知道数据类型Int是否被占用。

如果您认为这个问题不恰当,请将其从网站上删除。

谢谢

3 个答案:

答案 0 :(得分:2)

NULL这里是正确的,因为它具体意味着没有输入任何值,这就是您要表示的内容。任何其他值实际上都有一些含义。例如,0是一个有效值 - 即使它在这种情况下可能没有意义。特别是将其设置为NULL意味着您明确声明未输入任何值。

至于max int问题,来自documentation

  

INT

     

整数(整数)数据从-2 ^ 31(-2,147,483,648)到2 ^ 31 -   1(2,147,483,647)。

答案 1 :(得分:2)

  

如果在这种情况下NULL值是有意义的(我读了一些不鼓励使用NULL的文章,所以我希望如果是这种情况)

如果你想要一些代表非价值的东西,那么

NULL就没问了。它比为每种不同的数据类型组成不同的表示(例如,数字中的-1或空字符串)更好。如果没有看到您阅读的文章并且知道它提出的论点(以及在什么情况下),我们就无法进一步评论。

  

size的值应该是0到100000,我想知道DataType int是否被占用。

这是大小最合适的整数类型 - tinyintsmallint的最大值低于100000.如果您想要彻底,请在表格中添加CHECK约束:< / p>

CREATE TABLE Properties (
    -- Various Columns
    Size int null,
    constraint CK_Properties_Sizes CHECK (Size between 0 and 100000)
    -- More columns, constraints, etc
)

答案 2 :(得分:2)

NULL是“正确的”方法,但它可以使编写查询变得困难,因为NULL将不会匹配除IS NULL之外的任何谓词。例如,假设您希望查询查找大小介于x和y之间的所有行,但您还希望显示没有任何大小的行。您的查询将如下所示:

select * from some_table
where size between x and y or size is null;

这可能会带来不必要的复杂性,您还需要处理如何呈现空大小。

更好的选择IMHO是制作列NOT NULL并强制用户输入大小。这将简化您的应用程序和查询代码。

不要告诉我客户拥有房产并且不知道它有多大。