diff --git a/ch5-web/ch5-05-database.md b/ch5-web/ch5-05-database.md index 3815a26..f3d6d40 100644 --- a/ch5-web/ch5-05-database.md +++ b/ch5-web/ch5-05-database.md @@ -123,7 +123,7 @@ func main() { >>> b.save() ``` -完全没有数据库的痕迹,没错 ORM 的目的就是屏蔽掉DB层,实际上很多语言的 ORM 只要把你的 class/struct 定义好,再用特定的语法将结构体之间的一对一或者一对多关系表达出来。那么任务就完成了。然后你就可以对这些映射好了数据库表的对象进行各种操作,例如 save,create,retrieve,delete。至于 orm在背地里做了什么阴险的勾当,你是不一定清楚的。使用 ORM 的时候,我们往往比较容易有一种忘记了数据库的直观感受。举个例子,我们有个一个需求:向用户展示最新的商品列表,我们再假设,商品和商家是1:1的关联关系,我们就很容易写出像下面这样的代码: +完全没有数据库的痕迹,没错 ORM 的目的就是屏蔽掉DB层,实际上很多语言的 ORM 只要把你的 class/struct 定义好,再用特定的语法将结构体之间的一对一或者一对多关系表达出来。那么任务就完成了。然后你就可以对这些映射好了数据库表的对象进行各种操作,例如 save,create,retrieve,delete。至于 orm在背地里做了什么阴险的勾当,你是不一定清楚的。使用 ORM 的时候,我们往往比较容易有一种忘记了数据库的直观感受。举个例子,我们有个需求:向用户展示最新的商品列表,我们再假设,商品和商家是1:1的关联关系,我们就很容易写出像下面这样的代码: ```python # 伪代码 @@ -173,7 +173,7 @@ orders := orderModel.GetList(where, limit, orderBy) 写 sql builder 的相关代码,或者读懂都不费劲。把这些代码脑内转换为 sql 也不会太费劲。所以通过代码就可以对这个查询是否命中数据库索引,是否走了覆盖索引,是否能够用上联合索引进行分析了。 -说白了 sql builder 是 sql 在代码里的一种特殊方言,如果你们没有DBA且研发有自己分析和优化 sql 的能力,或者你们公司的 dba 对于学习这样一些 sql 的方言没有异议。那么使用 sql builder 是一个比较好的选择,不会导致什么问题。 +说白了 sql builder 是 sql 在代码里的一种特殊方言,如果你们没有DBA但研发有自己分析和优化 sql 的能力,或者你们公司的 dba 对于学习这样一些 sql 的方言没有异议。那么使用 sql builder 是一个比较好的选择,不会导致什么问题。 另外在一些本来也不需要DBA介入的场景内,使用 sql builder 也是可以的,例如你要做一套运维系统,且将 mysql 当作了系统中的一个组件,系统的 QPS 不高,查询不复杂等等。