2012-06-20 43 views
1

我正在使用SQL Server数据库,我正在一个房地产网站上工作。我应该为NULL设置一个可选值的列吗?

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

用户可以有选择地输入一个属性的值(只有积分和正数)SIZE

目前我使用这个

int Size NULL 

我想知道:

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

请如果你觉得这个问题不恰当的只是评论,我会从网站中删除它。

感谢

回答

2

NULL是“正确”的方式,但它可以使文字查询一个痛苦,因为NULL不会只是IS NULL匹配任何谓词。例如,假设您想要一个查询找到所有具有x和y之间大小的行,但是您还想显示没有任何大小的行。您的查询将是这样的:

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

这会带来不必要的复杂性,还需要应对如何呈现零大小。

更好的选择恕我直言,是使列NOT NULL并强制用户输入一个大小。这将简化您的应用程序和查询代码。

不要告诉我,客户拥有一个财产,不知道它有多大。

+0

@BurhanKhalid如果他们足够愚蠢地进入这个,那就让他们吧。它们的属性不会出现在基于大小的搜索中。所以呢?他们无法抱怨 - 他们输入了数据。无论如何,我可能会在场上进行验证,以防止意外输入太小或负值等,但只要它通过基本验证,将其存储并继续前进。不要让网站“太聪明”,否则你最终会陷入混乱。银行不允许您输入 - 20美元作为ATM提款金额。人们也会接受不得不输入一个有效的大小。网站设计师通常对用户同情 – Bohemian

2

NULL这里是正确的,因为它具体是指没有值进入,这是您要代表什么。任何其他价值实际上都会有一些意义。例如0是一个有效的值 - 尽管在这种情况下它可能没有意义。具体将其设置为NULL意味着您明确指出没有输入值。

至于最大INT问题,从documentation:从-2^31(2,147,483,648)通过2^31

INT

整型(整数)数据 - 1(2,147,483,647) 。

2

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

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

大小的值应该是从0到100000,我想知道是否拨出DataType int

这是最适当大小的整体式 - tinyintsmallint具有较低的最大值超过10万。如果你想彻底,加CHECK约束到你的餐桌也:

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

有趣的使用约束,感谢posintg! – GibboK

相关问题