Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 数据库完整性:在数据库或应用程序逻辑中管理它?_Database_Separation Of Concerns - Fatal编程技术网

Database 数据库完整性:在数据库或应用程序逻辑中管理它?

Database 数据库完整性:在数据库或应用程序逻辑中管理它?,database,separation-of-concerns,Database,Separation Of Concerns,通常,当我编写使用DB的应用程序时,我会尝试通过我使用的编程语言(在我的例子中是Java)而不是DB本身来确保数据的一致性。原因如下: 数据管理逻辑不是“立即可见”的,也就是说,它不是(至少)我习惯的那种代码 很难将DB代码保持在源代码控制之下 然而,我可以看到在数据库端保留“数据完整性”逻辑的意义,主要是相同的数据库可以被其他应用程序(或其他人编写的应用程序的一部分)使用,而不会有损坏它的风险 “正确的方法”是什么?在将其存储在DB或应用程序的特殊层之间有什么选择标准吗?从我的角度来看,在数据

通常,当我编写使用DB的应用程序时,我会尝试通过我使用的编程语言(在我的例子中是Java)而不是DB本身来确保数据的一致性。原因如下:

  • 数据管理逻辑不是“立即可见”的,也就是说,它不是(至少)我习惯的那种代码
  • 很难将DB代码保持在源代码控制之下
  • 然而,我可以看到在数据库端保留“数据完整性”逻辑的意义,主要是相同的数据库可以被其他应用程序(或其他人编写的应用程序的一部分)使用,而不会有损坏它的风险


    “正确的方法”是什么?在将其存储在DB或应用程序的特殊层之间有什么选择标准吗?

    从我的角度来看,在数据库中定义引用完整性是强制性的

    你应该总是在那里定义它。本质上,它是您的“最后一道防线”,确保没有外部应用程序会弄乱您的数据

    如果您的数据有价值,那么从长远来看,它将被多个应用程序访问。而且,您的数据很可能会比您当前构建的应用程序寿命长,并且一个新的应用程序将接管

    此外,数据库中的约束可以防止手动运行SQL语句时出现人为错误(请考虑升级脚本、大规模导入)

    大多数现代数据库也可以使用约束来优化语句。ORM生成的语句通常包含对表的引用,这些表可能并不总是需要的。外键约束就位可以帮助数据库删除它们

    这里有两个链接显示了一些示例:


    最后但并非最不重要的一点:他们记录您的模型。如果您查看一个没有外键约束的数据库,您就不知道表之间是如何关联的(有些工具甚至可以帮助您编写语句,如果它们可以检测到数据库中的外键约束)。

    谢谢。我从来没有真正想过这个故事的自我记录部分。