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, 用來和外部交互數據.