2010-03-09 24 views
1

初始化我们可以知道它们在数据库中的值的列是一种很好的做法,例如类型唯一标识符的标识列可以具有缺省值(NEWID())或列显示记录创建日期可以有一个默认值(GETDATE())。数据库中列自动生成的值

我是否应该浏览所有表格,然后执行此操作,无论我确定无需手动分配值,并且自动生成的值是正确的。

我也在考虑使用linq-to-sql类并将这些列的“自动生成的值”属性设置为true。

也许这就是大家已经知道的,或者我正在问一个关于基本问题的问题,如果有的话请告诉我。

回答

2

是的,我肯定会建议分配合理的默认值到您的表列。

如果您有例如一些BIT字段大部分时间都是“0”或“1”,指定默认值可以确保它们被初始化为最可能的状态,并且只有当您确实需要更改它们时,您必须自己做一些事情。

如果你的表列有合理的默认值,你可以有非常简单的初始INSERT语句 - 只需插入你真正需要的,所有其他的东西都被设置为默认值。

当你插入某些东西时,默认值也只会发挥作用,所以只要你已经有一行,你可以任何你喜欢的方式改变它,没问题。

此外,默认值可帮助您定义NOT NULL约束 - 毕竟,如果将列设置为NOT NULL,则必须确保其始终有一个存储在其中的有效值。如果你定义了一个默认值并且偶然忘记在你的INSERT中设置一个值,那么默认值将被应用并且满足NOT NULL约束。总而言之:是的,默认值是一件“好事”!在适当的地方使用它们以及它们有意义的地方

0

我更喜欢将默认值分配给我的数据库列,除非我需要能够接受空格。我这样做只是我的问题。例如,如果你永远不会接受空值,则不允许空位。

1

个人而言,对于您很少需要的字段,NULL是一个选项,您应该始终将列设置为允许NULL,并且不要在数据库或代码中将其设置为任何默认值。我之所以这样说,是因为NULL有时在它没有设置任何内容的情况下对它有语义含义。例如,我曾经在医疗领域工作,以BloodType为例,将其留为NULL意味着我没有收集这些信息,并且不会在任何方程或诊断中使用它,而如果您随意给它并喂食它计算,你可能会得到一些意想不到的结果。对于条件的观察,可以和字符串一样,NULL可能意味着没有做出观察决定,而对于在晚些时候可能被错误解释的默认值。

+0

很好的例子,另一种情况,除非有商业理由离开我会输入一个默认值。当然,除非你对数据库文件大小特别在意。 – 2010-03-09 06:14:42

+0

我确实与你批准关于NULL应该用来保留一个语义含义,很多时候NULL有用,当我搜索我的数据来获得一些指标时,比如有多少网站用户直接注册而没有推荐人,然后我计算用户谁的推荐人值为空。尽管在这种情况下NULL不具有语义含义,并且大部分时间列都会有NOT NULL约束。 – Jamal 2010-03-09 06:39:22

相关问题