トップ «前の日(12-17) 最新 次の日(12-19)» 追記

アペフチ


2011年12月18日 Sequelの主キー、外部キー この日を編集

_ [Ruby][Sequel] Sequelの主キー、外部キー

 Hikiに折角Rackブランチがあるのだから、Herokuで動かしてみたいなーと思って作業中。RDBMS用のライブラリーとしてSequelを選んで、ドキュメントを見ながら、或いはYARDを使いながらストレージ用のクラスを実装している。

 その過程で、ドキュメントだけでは分からなくてSequelのソースを読んだ所があるので、同じ手間を繰り返さないために書いておこうと思う。

_ 環境

 Sequelのバージョンは3.30.0。

 SequelにはSQLを書くようにRubyコードを書くデフォルトのインターフェイスと、DataMapperActiveRecordみたいに関係データベースとRubyのモデルクラスの間を取り持ってくれるSequel::Modelというインターフェイスの両方があるのだけど、今使っているのは前者*1

*1 Hikiデフォルトのinfo.dbを置き換えるのに相性が良さそうだから。

_ 主キー

 テーブル定義で主キーを定義するのはこういうふうにする。

 DB = Sequel.sqlite
 
 DB.create_table :page do
   primary_key :id
   String :title
            :
   DateTime :last_modified
 end
 これでidフィールドが、行挿入の度にインクリメントしてくれるinteger型の主キーになる。
 Integer型じゃないフィールドを主キーにしたい時にはこうする。

 DB.create_table :page do
   String :title, :primary_key => true
 end
 複合主キーはこう。

 DB.create_table :keyword do
   String :page_title, :null => false, ...
   String :keyword,    :null => false, ...
 
   primary_key [:page_title, :keyword]
 end

_ 外部キー

 外部キーの定義にはforeign_keyメソッドを使う。一つ目の引数がフィールド名で二つ目が外部テーブル名。

 DB.create_table :albums do
   primary_key :id
   foreign_key :artist_id, :artists
 end
 外部テーブルでのフィールド名を指定したい時はこうする。

 DB.create_table :reference do
   String :from, :key => :title, :table => :page, :null => false
   String :to,      :key => :title, :table => :page, :null => false, :index => true
 end
 これでpageテーブルのtitleフィールドを参照するようになる。
 複合キーについてはこう。

 DB.create_table :artists do
   String :name
   String :location
 
   primary_key [:name, :location]
 end
 DB.create_table :albums do
   String :artist_name
   String :artist_location
   String :name
 
   foreign_key [:artist_name, :artist_location], :artists
 end

_ ま、ソースを読んだのは外部テーブルのフィールド名を指定するところだけで、後はドキュメントが充実してたので問題無いんですけどね。

_ [Hiki] Hikiを眺めていて思ったこと

 関係無いけど、Hikiのデータベースの所を見ていて思ったのは、キャッシュを抽象化したいということ。Hikiの今の実装での(Hiki記法をパースして組み立てたHTMLの)キャッシュはファイルに書き込んでいるんだけど、Herokuではご存知の通りファイルを作れない。ので(無料プランでは)PostgreSQLに入れることになる。それにRedisとかにキャッシュしたいこともあると思う。ので、そのへんを抽象化しておいた方が取り回しが楽だなあと思う。

 尤も、Hikiのコンセプトの一つがCGIでなるべく設定に手間を掛けずに導入できることだと思うので、Hiki本体を弄るのではなくて外部拡張の形がいいんだろうと思う。


2014年12月18日 MDNの翻訳で問題に感じていること この日を編集

_ MDNの翻訳で問題に感じていること

この日記はMDNやFirefox OSのドキュメントをみんなで翻訳! Advent Calendar 2014のエントリー記事です。

_ MDNの翻訳で問題に感じていることとその解決法を書こうと思っていたのですが、体調を崩してしまい解決法まで辿り着けませんでした、済みません。あと、この日記も一日遅れで、済みません。

_ Firefox OS楽しみで、日本でもアプリ開発盛り上がるといいなーって思ってMDNの翻訳を少ししてみたのですが、元記事が変更されるのが結構怖いなと思いました。

_ 今のところ、翻訳元の英語の記事が新しくなったことは、日本語記事の編集画面を表示しないと見られないように思います。でも、終わったつもりの翻訳の編集画面なんて、定期巡回しませんよね。

_ 各記事には、subscribeするというリンクがあって、僕も自分の訳した記事とその元記事はsubscribeしているはずなんですが、subscribeしている記事一覧、みたいな場所が見当たらなくてこれも元記事への追従には使えない。

_ 記事ごとのフィードがあれば、未だにフィードリーダー使ってる人間なんでまあいいかなと思ったのですがこれも無い。

_ でもJSONなら見られるので、これを監視して、更新があったら通知するスクリプト書けばいいかな、せっかくMDNのアドベントカレンダーなんだからFirefox OSアプリにしよう、と思って作り始めるも、MDNサイトのバグでXMLHttpRequestの同一オリジンポリシーに引っ掛ってできない、プロクシー使うか……というところで風邪をひいてしまいました。

_ subscribeしている記事が一覧できれば根本解決なんですが、どなたかそういう所知らないでしょうか。

本日のツッコミ(全6件) [ツッコミを入れる]

Before...

_ 北市真 [おお、これは便利なリンクをありがとうございます! ここからフィルタリングして興味のあるページを集めるのもよさそうで..]

_ Johng440 [Good writeup, I am normal visitor of ones blog, maintain u..]

_ 北市真 [subscribeしている記事に変更があったら、通知メールが来るようです。]