再開発メモ002

Power モデル

スキーマはこんな感じ。genitive は Order#to_s で使うことになる。

  create_table "powers", force: true do |t|
    t.string   "name"
    t.string   "symbol"
    t.string   "genitive"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

seeds.rb はこう。

Power.create symbol:'A', name:'Austria', genitive:'Austrian'
Power.create symbol:'E', name:'England', genitive:'English'
Power.create symbol:'F', name:'France',  genitive:'French'
Power.create symbol:'G', name:'Germany', genitive:'German'
Power.create symbol:'I', name:'Italy',   genitive:'Italian'
Power.create symbol:'R', name:'Russia',  genitive:'Russian'
Power.create symbol:'T', name:'Turky',   genitive:'Turkish'
Power.create symbol:'X', name:'Master'

Province モデル

最低限必要なフィールドはこれくらいだろうか。

第1案
  • shortname: 略称。
  • fullname: フルネーム。
  • supplycenter: 補給都市の有無。
  • homepower: 初期支配国。Power への参照。


今回の地名は jDip 準拠にする予定だが、その場合、shortname が全部小文字になってしまうのが悩みどころ。
なので、小文字略称のフィールド名を code*1 に変更して、code の一文字目を大文字に変換するメソッド Province#shortname を後で用意する。

第2案
  • code : 識別子としての略称。全て小文字。
  • fullname: フルネーム。
  • supplycenter: 補給都市の有無。
  • homepower: 初期支配国。Power への参照。


面倒なのが「bul」「spa」「stp」の港の問題。例えば「bul」「bul(ec)」「bul(sc)」は全て別物でありながら、場合によっては同じ地域として扱わなければならない。


ここはシンプルに port フィールドを追加して区別しよう。「bul」の場合、マスタデータは {code:'bul', port:nil}、{code:'bul', port:'ec'}、{code:'bul', port:'sc'} の3レコードになる。これらは Province#code が一致するので同じ地域として扱える。
港のカッコ表記は Province#shortname に任せる。

第3案
  • code: 識別子としての略称。全て小文字。
  • fullname: フルネーム。
  • supplycenter: 補給都市の有無。
  • homepower: 初期支配国。Power への参照。
  • port: 港。「bul」「spa」「stp」以外は nil


後はちょっと考えがあるので単一テーブル継承用のフィールド type を追加しておく。

最終案
  • code: 識別子としての略称。全て小文字。
  • fullname: フルネーム。
  • supplycenter: 補給都市の有無。
  • homepower: 初期支配国。Power への参照。
  • port: 港。「bul」「spa」「stp」以外は nil
  • type: 単一テーブル継承用。

今日はここまで。

*1:適切な名前が思い浮かばず。id は Rails の、key は MySQL の都合で使えない。codename はちょっとくどい。