为数据库中的列自动生成的值

时间:2010-03-09 05:51:58

标签: linq-to-sql database-design default-value

初始化我们可以在数据库中知道它们的值的列是一个好习惯,例如,唯一标识符类型的标识列可以具有默认值(NEWID()),或者显示记录创建日期的列可以具有默认值(GETDATE())。

如果我确定不需要手动分配值并且自动生成的值是正确的,我应该检查所有表格并执行此操作。

我也在考虑使用linq-to-sql类并将这些列的“Auto Generated Value”属性设置为true。

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

3 个答案:

答案 0 :(得分:3)

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

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

如果您的表列具有合理的默认值,则可以使用非常简单的初始INSERT语句 - 只需插入您真正需要的内容,将所有其他内容设置为默认值。

当您插入某些内容时,默认值也只会发挥作用,所以只要您已经有一行,您就可以随意更改它,没问题。

此外,默认值可以帮助您定义NOT NULL约束 - 毕竟,如果将列设置为NOT NULL,则必须确保它始终具有存储在其中的有效值。如果您定义了一个默认值并且忘记在INSERT中设置一个值,则默认值将应用并满足NOT NULL约束。

总而言之:是的,默认值是“好事”!在适当的地方使用它们并在有意义的地方使用

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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