Ecto 中, 对数据库的操做中常常用到 4 个类型:数据库
在 Ecto 的 API 中, 基本都是都是对这 4 个类型的操做, 这 4 个类型的关系和互相转换弄清楚, 有助于更好的使用 Ecto 的 API.对象
schema 定义了数据库中表的结构, 包括表字段名称, 类型, 以及表之间的关系. Ecto 的 API 中, 对哪张表进行操做, 通常都是经过 schema 来肯定的.接口
经过 schema, 就能够明确 API 的操做对象.date
changeset 主要用于更新数据(包括插入, 更新, 删除). changeset 详细记录了和数据库的变化有哪些.序列化
使用 Ecto.Changeset 中的 API, 能够将一个 struct 或者 map 转变为 changeset, 而后就能够更新数据库中的数据了.map
struct 能够理解为实例化的 shema struct 的类型通常都是由 schema 定义的, 也就是 struct 中的字段都是对应的 schema 中定义的.总结
struct 也能够像 changeset 那样, 用于更新数据库的操做. 可是更多的是用在接收查询, 或者更新数据库(insert, update, delete)以后的结果.数据
map 其实就是 elixir 中的 map 类型, 有了 struct, 为何还要 map 呢? 由于对外提供接口的时候, 须要序列化数据后再传输, 此时, struct 的类型是不重要的, 只要其中的数据就能够了.查询
简单来讲, 在 Ecto 内部, 只需用到 changeset, struct, schema, 其中, changeset 用来操做具体的数据库, struct 用于接收数据库操做(即 增删改查)的结果, schema 用来定义 struct 的类型.elixir
至于 map, 用来和外部交互数据.