Database design 软件设计:干燥、单一真实来源和数据验证

Database design 软件设计:干燥、单一真实来源和数据验证,database-design,dry,single-source,Database Design,Dry,Single Source,来自维基百科关于: DRY原则被表述为“在一个系统中,每一项知识都必须有一个单一的、明确的、权威的表示。”安迪·亨特(Andy Hunt)和戴夫·托马斯(Dave Thomas)在《实用程序员》(The Practical Programmer)一书中阐述了该原则。他们广泛地应用它,包括“数据库模式、测试计划、构建系统,甚至文档” 来自维基百科关于: 在信息系统设计和理论中,如企业级的实例所示,单一真实源(SSOT)指构建信息模型和相关模式的实践,以便每个数据元素只存储一次(例如,在单个表的单个

来自维基百科关于:

DRY原则被表述为“在一个系统中,每一项知识都必须有一个单一的、明确的、权威的表示。”安迪·亨特(Andy Hunt)和戴夫·托马斯(Dave Thomas)在《实用程序员》(The Practical Programmer)一书中阐述了该原则。他们广泛地应用它,包括“数据库模式、测试计划、构建系统,甚至文档”

来自维基百科关于:

在信息系统设计和理论中,如企业级的实例所示,单一真实源(SSOT)指构建信息模型和相关模式的实践,以便每个数据元素只存储一次(例如,在单个表的单个行中存储不超过一次)。与此数据元素的任何可能链接(可能在关系模式的其他区域,甚至在远程联邦数据库中)都仅通过引用


我的问题:如果我正在编写一个数据库应用程序,并且我已经编写了验证用户输入数据的特定代码,我会打破DRY和SSoT的原则来定义我的数据库字段的数据类型,以最接近它期望的数据吗?(与此相反,只对每个字段使用文本数据类型。目前,让我们忽略其他潜在好处,如索引)。

如果构建过程使用配置文件为数据库和应用程序层生成正确的代码,就不会违反DRY原则

应用程序程序员只在应用程序代码级别进行验证是很常见的,这通常是一个错误

例如,您可以使用单个配置文件生成javascript以通过web界面进行验证,生成SQL DDL,并生成SQL check()约束以在数据库级别进行验证


您无法明智地避免在两种执行环境中运行不同的代码。(遗留数据库应用程序可能有几十种不同的执行环境。)DBA不必使用您的应用程序代码来更新数据库。其他应用程序代码——可能不一定告诉您的代码——也不必使用您的应用程序代码。

绝对不必。事实是信息——模型代表了信息。(现在,数据库模型可能无法知道——也许不应该知道——每一个细节,但它不应该允许公然撒谎。)假设我有一个只接受数值的输入字段,但系统所有者说他们现在想验证该输入,以便允许使用任何字母数字值。根据您的回答,我现在必须更新两个位置的代码:应用层的验证代码和数据库中的数据类型。如果我的应用程序是truly DRY和SSoT,那么我不应该在两个地方更新东西来适应一个变化,不是吗?