Go问答 orm问题

dbas · 2019年09月12日 · 最后由 dbas 回复于 2019年09月16日 · 686 次阅读

使用 gorm 过程中,看到都 要定义结构本,结构体的字段与数据库字段差不多。 问题,如果数据库有很多字段,难道说还要把所有字段都重新定义成结构本??

更多原创文章干货分享,请关注公众号
  • 加微信实战群请加微信(注明:实战群):gocnio

看情况吧

如果是 CRUD boy , 数据库只是个带简单约束的存储单元, 那一般来说, 表字段与结构体基本一致. 但如果数据库中包含有业务逻辑比如触发器/存储过程甚至细粒度的权限控制的话, 那么数据库表 ( 包括 table / view 或 returns sets of table......... 的存储过程或数据库函数....... ) 与结构体会有比较大差异..............

简单来说, 看是什么数据库, 数据库在整个技术实现架构中是什么业务实现担当.......


举个最简单的例子:

某个业务要求, 数据库中的某个 table 的记录, 永远不能清除 也就是永远不能执行 delete 这个 SQL 指令, 代替指令是 update ....... set deleted = true , deteted_datetime=now().............

换个方式说, table 中有两个字段 deleted 是一个 bool 字段, 默认为 false , 当 update deleted = true 时表示该条记录对于业务来说, 是一条被删除掉的记录, 但这条记录本身只是被标记为 删除, 而继续保存在 数据库中

这样的情况下

go 的结构体不会有 deleted 这个字段, 但数据库对应表上有这个 deleted 字段, 当然了, deleted_datetime ( 字段类型 timestamp ) 这样的字段也是同理

不过, 我上面说的这个, 多数 ORM 是不支持的. 所以, 只是个大致的举例..................................... 说明 go 结构体与 数据库的表结构, 字段可能不一致.


当然了, 我说的这个小例子, 可能有很多现实问题, 或者变通解决方案, 就不一一展开了.

以上, 祝愉快.

感谢,回复这么多。感谢!~

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册