插入日期,在数据库中设置默认值或在应用程序中设置

本文关键字:设置 默认值 应用程序 数据库 日期 插入 | 更新日期: 2023-09-27 18:33:43

我正在编写一个新的应用程序,我正处于设计阶段。 一些数据库表需要一个InsertedDate字段,该字段将在插入记录时显示。

我正在考虑将Default Value设置为GetDate()

与在数据库中设置默认值相比,在应用程序中执行此操作是否有优势?

插入日期,在数据库中设置默认值或在应用程序中设置

我认为最好在

SQL Server中将默认值设置为GetDate((,而不是在您的应用程序中。您可以使用它来获取基于插入的有序表。如果您尝试从应用程序设置它,它看起来像是开销。除非您想在插入中指定某个特定日期,否则我认为这会扼杀它的目的。

如果需要手动将记录插入数据库,则需要记住在应用程序中设置默认值以避免 NULL 引用时设置此字段。

就个人而言,我更喜欢在可能的情况下在数据库中设置默认值,但其他人可能对此有不同的看法。

如果在应用程序中执行此操作,则可以对其进行单元测试。 在我参与的项目中,尤其是在使用 ORM 时,我们在代码中执行所有默认操作。

在设计时,我总是非常重视关注点分离,对我来说,在"数据库功能与应用程序功能"的上下文中,这归结为一个问题:"谁拥有数据?我一直认为我的代码拥有我的数据 - 而不是数据库。数据库只是数据的容器。这类似于说我拥有我的衣服,而不是我的梳妆台拥有我的衣服。我的梳妆台执行着一个重要的功能,使我的衣服有条不紊地提供,但我始终是将衣服放入梳妆台的代理人,我负责他们的组织。

我相信很多人会对这个类比有问题,说现代数据库比我的梳妆台强大得多,但根据我的经验,我在数据库层中放入的功能越多,项目就越混乱,数据和功能之间的界限就越模糊(例如数据库存储过程等(。诚然,你的是这个概念的简单例子,但一旦开创了先例,任何事情都会发生。

我想解决的另一件事是易用性因素。我拒绝这样的想法,因为特定的实现很方便(例如避免空值,不同的服务器时间等(,那么我应该选择它。对我来说,选择这样的实现相当于说:"如果我的代码不起作用也没关系。我将避免使用我的代码,而不是修复它并使其健壮。

我敢肯定,在很多情况下,可能是在极端规模或由于其他业务需求的情况下,数据库层功能不仅是保证的,而且是必要的,但我的经验告诉我,在代码中保留功能越多,您的应用程序就越干净、更简单、越健壮。