【问题标题】:Auto-generated values for columns in database数据库中列的自动生成值
【发布时间】:2010-03-09 05:51:58
【问题描述】:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    默认值也只有在你插入某些东西时才会起作用,所以一旦你已经有了一行,你可以随意改变它,没问题。

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 很好的例子,另一个场景,除非有商业原因保留 null,否则我会输入默认值。当然,除非您真的特别关注 DB 文件大小。
      • 我同意你关于 NULL 应该用于保持语义意义,很多时候 NULL 在我搜索我的数据以获取一些指标时很有帮助,比如有多少网站用户直接注册而没有推荐人然后我计算他们的推荐人值为空的用户。虽然在这种情况下 NULL 没有语义含义,并且大多数时间列将具有 NOT NULL 约束。
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-02
        • 2014-03-20
        • 1970-01-01
        • 2012-03-08
        • 2010-10-03
        • 2020-05-31
        相关资源
        最近更新 更多