分享

[Rails][notes]Active Record Migrations(4)-官網閱讀紀錄[12]

記錄自己官網文件閱讀的注釋與筆記
主要也是訓練自己閱讀英文挑戰
https://guides.rubyonrails.org/getting_started.html
官網 文件 rails

攝影師:Magda Ehlers,連結:Pexels


6 Schema Dumping and You

6.1 What are Schema Files for? 

  預設中Rails 產生db/schema.rb嘗試著表現出目前資料庫狀態。schema傾向於透過bin/rails db:schema:load載入schema檔案,快速且低錯誤率的建立一個實體的應用程式資料庫,而不是重複執行整個migration。
Old migrations也許無法被同意使用,如果是使用外部相依或著是而外的程式碼。
如果你想快速查看Active Record具有屬性,Schema檔案是非常有用的,這些訊息可能分散在各個檔案,但是Schema記錄著完整的架構。

6.2 Types of Schema Dumps

透過Rails 的config/application.rb中設定config.active_record.schema_format 生成 schema 
設定值可以是:ruby,或:sql。
如果選擇使用:ruby,你可以在db/schema.rb 找到這份文件,內容看起來就是一個龐大的migrations檔案。
  

ActiveRecord::Schema.define(version: 2008_09_06_171750) do

  create_table "authors", force: true do |t|

    t.string   "name"

    t.datetime "created_at"

    t.datetime "updated_at"

  end


  create_table "products", force: true do |t|

    t.string   "name"

    t.text     "description"

    t.datetime "created_at"

    t.datetime "updated_at"

    t.string   "part_number"

  end

end

透過使用create_table, add_index來建立資料庫與表達結構。
db/schema.rb無法表達有所有資料庫中的描述,例如觸發器、序列及儲存過程,即使migrations使用execute建立資料庫,但是ruby DSL並不支援。如果你要使用這些功能則需要透過設定:sql ,用來建立準確的schema。如果設定為:sql則轉檔為db/structure.sql,則需要使用特殊的工具例如PostgreSQL使用pg_dump,MySQL 和 MariaDB 透過SHOW CREATE TABLE輸出多張資料表。
透過載入db/structure.sql,執行bin/rails db:schema:load。則會透過內容中的SQL語法加載文件。根據定義這將會為資料庫建立完美的副本。

6.3 Schema Dumps and Source Control

由於schema通常用來建立新的資料庫,強烈建議透過程式碼去檢查schema。

7 Active Record and Referential Integrity

Active Record 認為事情需要在model中完成,而非資料庫,所以如同觸發器、或是約束資料表都應該在資料庫中執行。
如同validates :foreign_key, uniqueness: true這樣的驗證功能,可以增加model對資料的完整性。:dependent這個關聯選項允許當父物件被刪除,子物件將被自動刪除。有些人認為這樣無法保證參照的完整性,應該與外鍵約束一樣放在資料庫處理才對。
Active Record 並沒有直接提供工具來處理,但可以透過execute來執行SQL語法。

8 Migrations and Seed Data

Rails migration 功能主要的目的 是透過一致性的處理修改schema。Migrations也可以添加或修改數據,用於正在執行且無法刪除的資料庫中很有用。
  

class AddInitialProducts < ActiveRecord::Migration[6.0]

  def up

    5.times do |i|

      Product.create(name: "Product ##{i}", description: "A product.")

    end

  end


  def down

    Product.delete_all

  end

end

 透過seeds的功能可以在建立資料庫時,初始化資料,這在開發環境與測試環境的資料庫上建立模擬資料很有用處。要使用這個功能可以在db/seeds.rb中添加一些ruby程式碼並且執行bin/rails db:seed。
  

5.times do |i|

  Product.create(name: "Product ##{i}", description: "A product.")

end

這是一個在空白資料庫中的應用程式建立一些模擬資料的簡潔方法。

9 Old Migrations

db/schema.rb or db/structure.sql 是你目前資料庫的快照及重建資料庫重要的來源,這樣就可以刪除舊的Migrations文件。當你從db/migrate/目錄中刪除migratio檔案,它們仍然存在任何執行過bin/rails db:migrate的環境中,Rails內部將保留這些時間戳記,在Rails 資料庫的資料表中名為schema_migrations。
如果你執行bin/rails db:migrate:status,將會顯示每個migration的狀態,你可以看見這樣的顯示********** NO FILE ********** 顯示所有被刪除的文件,可能在特定指定環境執行,但不能在db/migrate/找到。
#官網  #文件  #rails 
分類:學習

評論
上一篇
  • [Rails][notes]Active Record Migrations(3)-官網閱讀紀錄[11]
  • 下一篇
  • [Rails][notes]Active Record Validations(1)-官網閱讀紀錄[13]
  • 更多文章
    載入中... 沒有更多了