如果使用 ORM,是不是需要在 DB 中定义关系?

Posted

技术标签:

【中文标题】如果使用 ORM,是不是需要在 DB 中定义关系?【英文标题】:Do you need to define relationship in the DB if you use ORM?如果使用 ORM,是否需要在 DB 中定义关系? 【发布时间】:2019-06-19 17:28:23 【问题描述】:

我对 Postgres 很陌生,对 SQLAlchemy 也很陌生,所以如果这是一个愚蠢的问题,我深表歉意。

我花了一些时间在谷歌上搜索并阅读有关 SQLAlchemy 的文档,但我似乎无法找到一个直接的答案。

所以,我的问题是这个..

由于使用ORM时在代码中定义了关系,如果数据库表结构定义了必要的列字段,那么您是否真的需要在数据库本身中定义ForeignKey约束?

我知道约束有助于加强完整性,但它们是否需要在那里才能成功实现 ORM?

【问题讨论】:

相关:sqlalchemy: create relations but without foreign key constraint in db? 【参考方案1】:

外键约束不需要才能成功实现 ORM。我认为 ORM 可能最常见的是尝试自己管理这种事情,而不是遵循数据库最佳实践。

就我个人而言,我对这种方法有疑问。我通常处理企业数据库,这些数据库有许多以多种不同语言编写的程序来访问数据库。其他程序只是不会通过调用 ORM 来删除行并级联删除,即使这是可能的。

一些 ORM 支持“遗留”数据库,这意味着 ORM 可以配置为处理已经实现任意约束的数据库、具有多个列而不是每个表的 ID 号的主键、级联更新和删除等。

无论如何,数据库属于业务,不属于ORM。对该想法的支持也各不相同。

【讨论】:

对于我正在玩的所有对数据库的访问都将通过 API。这些 API 的背后是 SQLAlchemy。在这种情况下,我很难看到在数据库本身中定义关系的有效“需求”

以上是关于如果使用 ORM,是不是需要在 DB 中定义关系?的主要内容,如果未能解决你的问题,请参考以下文章

检查多个ORM关系的字段是不是包含值

orm的操作

如何在 Kohana 3 中链接多个 ORM 关系?

orm 常用字段及参数

Django之ORM操作

使用 Eloquent ORM 时是不是需要在数据库级别维护外键?