使用 ORM 模型而不是正确的数据库建模
Using ORM models instead of proper database modeling
我最近继承了一个有趣的数据库建模项目(即缺少一些索引和外键定义)。该项目使用 GORM,据我所知,这些模型具有正确定义所有内容的标签。
我想不出为什么对数据库 "modeling" 使用 ORM 不起作用的原因。我能得出的最接近的是性能,但在规模上这需要 运行,这一点似乎没有实际意义。 运行这种方式有什么缺点吗?
我知道在我的公司做同样的事情的唯一缺点是:
- 互操作性 - 你需要使用 golang 来搞定一切 运行,所以如果你有项目想在新数据库上使用另一种语言,那就有点奇怪了。
- 复杂 SQL 东西 - 偶尔你会想要使用一个复杂的特性,它可能很难编写标签(例如:复合索引要求所有字段上的标签使用相同的索引名称,但是精神分析很奇怪而且你无法决定顺序)
- 迁移 - 如果您使用内置的
AutoMigrate
,您可以创建表、列和索引,但您不能添加默认数据或写入数据转换,也不会删除列,它也不保留更改历史记录。如果所有开发人员都使用同一个开发数据库,这不是什么大问题,但是如果您开始拥有单独的数据库,您可能也会开始保留迁移 sql 文件,您必须单独管理这些文件来自 Gorm.
我不后悔最初使用它,因为在一个地方开始声明模型和 sql 更容易,但随着我们的成长并开始使用更高级的 sql功能和更多数据库,我们不得不切换到实际进行模式定义和迁移。
我最近继承了一个有趣的数据库建模项目(即缺少一些索引和外键定义)。该项目使用 GORM,据我所知,这些模型具有正确定义所有内容的标签。
我想不出为什么对数据库 "modeling" 使用 ORM 不起作用的原因。我能得出的最接近的是性能,但在规模上这需要 运行,这一点似乎没有实际意义。 运行这种方式有什么缺点吗?
我知道在我的公司做同样的事情的唯一缺点是:
- 互操作性 - 你需要使用 golang 来搞定一切 运行,所以如果你有项目想在新数据库上使用另一种语言,那就有点奇怪了。
- 复杂 SQL 东西 - 偶尔你会想要使用一个复杂的特性,它可能很难编写标签(例如:复合索引要求所有字段上的标签使用相同的索引名称,但是精神分析很奇怪而且你无法决定顺序)
- 迁移 - 如果您使用内置的
AutoMigrate
,您可以创建表、列和索引,但您不能添加默认数据或写入数据转换,也不会删除列,它也不保留更改历史记录。如果所有开发人员都使用同一个开发数据库,这不是什么大问题,但是如果您开始拥有单独的数据库,您可能也会开始保留迁移 sql 文件,您必须单独管理这些文件来自 Gorm.
我不后悔最初使用它,因为在一个地方开始声明模型和 sql 更容易,但随着我们的成长并开始使用更高级的 sql功能和更多数据库,我们不得不切换到实际进行模式定义和迁移。