gpt4 book ai didi

language-agnostic - 持久化域模型时是否应该使用外键约束?

转载 作者:行者123 更新时间:2023-12-04 07:45:33 24 4
gpt4 key购买 nike

不久前,我与同事讨论了Domain Models的持久性以及是否应在数据库级别强制使用外键约束。

我的第一个 react 是关系数据库的使用暗含了对此类约束的执行,但有人认为数据库不应被视为一种持久性机制,因此我们应避免在其中放置任何业务逻辑。最后,我们不使用外键约束。

这是我的问题(我希望这不是太笼统):在这些情况下实现关键约束是否被视为良好实践?

最佳答案

强制约束,但不要在业务逻辑中依赖约束

  • 数据库上没有业务逻辑:我同意这一原则。而且,如果您的非SQL业务代码依赖依赖数据库约束来检查数据库一致性,那么您应该重新考虑您的业务逻辑。
  • 在业务逻辑中除了外,还具有数据库约束没什么错。尤其是因为易于使用FOREIGN KEY和其他UNIQUE约束进行参照完整性之类的事情,并且RDBMS可以非常高效地为您完成这项工作,而无需进行大量维护。
  • 您是否也不会在数据库上使用索引,因为它不是纯粹与持久性相关的?
  • 查找和修复软件错误可能会花费您一些时间,但是您绝对不希望花费更多的时间进行清理或(更糟糕的)丢失一些数据,只是因为节省了编写FK的单行脚本的麻烦。真的:您在这里免费得到一些东西,而您拒绝了吗?
  • [EDIT-1]:您可以保证通过应用程序仅通过来管理数据库中的数据吗?似乎总是有异常(exception),通常是 super 用户,有时他们(很少:-)会犯错误并执行一些SQL语句来清理代码,更新状态(由于输入错误而导致无效值)等。
  • [EDIT-2]:建立域驱动模型不是不聘请优秀数据库管理员的借口。使用ORM并不是不聘请优秀的DB开发人员的借口。

  • 但是,如果您和您的团队能够编写无错误软件并处理代码中所有可能的异常情况(包括硬件/网络/虚拟用户/程序员错误错误),那么“嘿,为什么要为冗余FK烦恼约束...。”--预告片-

    关于language-agnostic - 持久化域模型时是否应该使用外键约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1076369/

    24 4 0
    文章推荐: twitter-bootstrap - 使用 Twitter Bootstrap 向容器添加填充
    文章推荐: Java - List 类型的方法 descendingIterator() 未定义