如果我总是用PHP控制我的数据库输入,那么NOT NULL和FOREIGN KEY之类的约束有多重要?

sta*_*zel 22 php mysql constraints

我试图在一个外键的表中创建一个列,但在MySQL中,它比它应该更难.它需要我返回并对已经使用的表进行某些更改.所以我想知道,MySQL有必要确保某个值合适吗?我不能只是做与像PHP语言,其中我使用到访问该数据库

与NOT NULL类似.如果我只用PHP访问这个数据库,我不能简单地让PHP确保没有输入空值吗?

当我可以使用PHP时,为什么我应该使用MySQL来强制执行这些约束?


我意识到由于上述原因,NOT NULL是一个非常愚蠢的部分.但是,如果没有严重的编程,MySQL就不会强制执行外键.

在您看来,使用"假"外键仍然是不好的,只需检查输入的值是否与其他表匹配,使用PHP?

yfe*_*lum 55

使用PHP犯错,100%保证.PHP是程序性的.你想要的是声明性约束.您想要告诉整个堆栈:"这些是对数据的约束,并且不能违反这些约束." 您不希望在"步骤1 ...步骤2 ...步骤3 ...步骤432 ..."中作为执行数据约束的方法,因为

  • 你会弄错的
  • 当你以后改变它时,你会忘记你现在所做的
  • 没有其他人会像你现在所知道的那样知道所有这些隐含的约束,包括你未来的自我
  • 需要大量代码才能正确地执行约束 - 数据库服务器已经具有此代码,但您是否准备编写它?

问题实际上应该措辞,"当我可以使用MySQL时,为什么我应该使用PHP来强制执行这些约束?"

  • 如果你想捕获错误,弄清楚什么是错的,并向用户显示有意义的信息,那么通过各种方式*也*在PHP中实现检查和验证.但如果那是你实现它的*唯一的地方,那么你会*错误的. (4认同)
  • 这不是什么意思,验证您想要的所有内容,但如果您忘记了任何事情,那么您不会冒着数据完整性的风险,只会给用户带来蹩脚的错误. (3认同)

rec*_*ive 17

你不能"只是"用PHP来做,因为程序员"只是"不能编写无错误的代码.这比你想象的要难.特别是如果你认为它并不那么难.

  • 游戏软件可能更难.无论如何,一旦全世界发现Philippe Grondier的无错误代码,我就会失业. (14认同)

Tom*_*lak 8

如果你能发誓为你的生活,没有什么会永远访问数据库,虽然任何其他手段那么你的PHP页面(当然无bug的),然后用PHP做它独自将被罚款.

由于真实场景总是包含一些不确定性,因此让DB服务器观察数据的完整性是一件好事.

对于简单的数据库,参照完整性约束可能不是绝对的要求,而是一个很好的.应用程序越复杂,您从中获得的好处就越多.尽早规划它们会让您的生活更轻松.

此外,引用完整性使它成为强迫您以更多书本方式设计数据库的一部分,因为不再可能存在每个脏黑客攻击.这也是一件好事.