我正在与一位开发人员讨论如果表使用默认值的问题.对此有一个严格的规则,还是最佳实践中的灰色区域?
我的规则:如果许多记录将使用该默认值(至少最初),那么我喜欢将其用作默认值.例如,在线商店中产品的图像表可能具有默认路径images/NoPictureYet.png
.最终,这些将被替换,但对于批量加载的数据,其中图片根本不存在(并且可能大部分都不会!),默认是有意义的(至少对我来说).
如果没有合理的默认值(例如客户数据库中的"名字" - 我不希望我的名字默认为"FirstName"),那么我将其设为不可为空且无默认值 - 应用程序有责任确保输入正确的值.
但对此没有严格的规定.这一切都有所不同;)
我亲自发现使用默认值的一个实际案例是last_modified
列.
此列永远不会被存储过程或业务逻辑更新,但当行中的任何值更改时,触发器会自动更新.但是,它也GETDATE()
默认设置为,以便新行的值包含创建时间的时间戳,基本上是上次修改时的时间戳.
ALTER TABLE users ADD CONSTRAINT dc_users_last_modified DEFAULT GETDATE() FOR last_modified;
然后更新触发器看起来像这样:
CREATE TRIGGER trigUpdate_users ON users FOR UPDATE AS BEGIN IF NOT UPDATE(last_modified) UPDATE users SET last_modified = GETDATE() WHERE user_id IN (SELECT user_id FROM inserted); END GO