第2項. Fixed Schemaを使用する。

Fixed Schemaは、各モデルごとに、個別のデータベースがあります。各属性はテーブル内の列として存在する。

 1. Fixed Schemaのメリット

● データベースのサイズが小さい。Indexを特定の属性に指定することができます。
● オブジェクト全体を一度に挿入するので、処理を早く実行することができます。

 2. Fixed Schemaのデメリット

● スキーマの変更にマイグレーションをしなければなりません。
● 適切なindexを指定しないと、データベースのパフォーマンスが遅くなることがあります。

 3. Fixed Schemaモデルを使用する

Fixed Schemaモデルの使用方法を説明する。Fixed Schemaモデルを使用するには、第1章.第5節.第1項.3Property Bagモデルを使用する。と同様に、”rhodes model”もしくは、”rhogem model”コマンドを実行し、モデルファイルを作成する必要があります。

/app/Roster/roster.rbをFixed Schema用に変更します。
まず、includeするモジュールをRhom::FixedSchemaに変更する必要があります。
次に、データベースに設定する項目をpropertyメソッドを使用して設定します。
設定例を以下に示します。

 

class Roster
  include Rhom::FixedSchema

  property :username, :string
  property :company_name, :string
  property :phone_number, :string
  property :address, :string

  property :age, :integer
  property :address_latitude, :float
  property :address_longitude, :float
  property :birthday, :date # 整数型に変換されます。
  property :last_updated_at, :time # 整数型に変換されます。

end

 

Fixed Schemaモデルは、アプリケーションを起動するときに、テーブルが自動生成されます。
Fixed Schemaモデルでは、第1章.第5節.第1項.3Property Bagモデルを使用する。と同様のオプションが利用できます。Fixed Schemaモデルでのみ使用できるオプションを以下に示します。

 

  • ● set(:schema_version, version) ・現在のFixed Schemaのマイグレーションバージョンを設定する。versionには、バージョンを文字列で指定する。例; “0.1”
  • ● property(column, type) ・テーブルのカラムの情報を設定する。columnには、カラム名をシンボルで、typeには、型をシンボルで設定することができる。
  • ● index(name, index) ・カラムにインデックスを指定するときに使用する。nameには、インデックス名をシンボルで、indexにはインデックスを指定したいカラム名を配列で指定する。
  • ● unique_index(name, index) ・一意なインデックスを指定するときに使用する。nameには、インデックス名をシンボルで、indexにはインデックスを指定したいカラム名を配列で指定する。

 

 4. データベースのマイグレーションに関連したビジネスロジックを実行する


データベースのマイグレーションに関連したビジネスロジックを実行する方法を説明する。具体的には、アプリケーションの移行作業が進行中のときに、しばらく時間がかかる場合があることをユーザに通知したいときなどがあると考えられます。
ロジックを組み込むには、/app/application.rbにon_migrate_sourceメソッドを記述します。

 

class AppApplication < Rho::RhoApplication

  def on_migrate_source(old_version, new_src)
    ...
    true
  end
end

 

old_version ・古いバージョンの値が文字列で取得できます。
new_src ・Hash形式でソースの情報を取得することができます。取得できる値は以下とします。

 

  • ● “schema_version” - スキーマのバージョンが入ります。
  • ● “name” - テーブル名が入ります。
  • ● “schema” - スキーマ情報が入ります。

 

メソッドの最後でtrueを返すようにすると、テーブルの作成が行われません。
メソッドの最後でfalseを返すと、テーブルの作成が行われます。

システム工房エムのサイトへのリンク

住所〒690-0017 島根県松江市西津田3-2-3 TEL.0852-23-8590 FAX.0852-23-8591
Copyright 2008-2010 System Maker M,All right reserved