InsertedDate,在DB中设置默认值还是在应用程序中设置?

时间:2012-05-10 18:04:14

标签: c# .net sql-server

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

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

在应用程序中执行此操作是否优于在数据库中设置默认值?

4 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

在设计时,我总是非常重视关注点的分离,对我而言,在“数据库功能与应用程序功能”的背景下,归结为“谁拥有数据?”。我一直认为我的代码拥有我的数据 - 而不是数据库。数据库只是数据的容器。这就像说我拥有自己的衣服,而不是我的梳妆台拥有我的衣服。我的梳妆台起着重要作用,以有组织的方式提供衣服,但我总是把衣服放在梳妆台上,我负责他们的组织。

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

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

我确信有很多情况,可能是极端规模或由于其他业务要求,数据库层功能不仅是有保证的,而且是必要的,但我的经验告诉我,您可以在代码中保留更多功能,您的应用程序将更清洁,更简单,更强大。