Hatena::Diary

TokuLog 改めB日記 このページをアンテナに追加 RSSフィード

サロゲートキーを使わないという選択肢はない

楽々ERDレッスン (CodeZine BOOKS)

楽々ERDレッスン (CodeZine BOOKS)

ふと思うことあったので、自分の考えをメモっておく。

弊社では現在稼動している全てのシステムサロゲートキーです。なぜそうしているかということについて。

サロゲートキーについて、「変更に強い」という点がよくとりあげられてます。クライアントコードは変更されるから主キーには向いてない、とか、そういうこと。実際うちでも最近クライアントコードの振りなおしあったよ(泣)

# 基本的にウチではクライアントコードを主キーにしたりはしてないので全然大丈夫なんだけどねー。

触れられてなくて、これ以上に重要なのが、ウェブアプリケーションにおける扱い。複合主キーなんて使ってたら画面遷移のたびにいろんな項目をキーとして渡さなきゃいけなくなるから工数が増える。些細なことのように思われるかもしれないが、ページによって渡すパラメータが変わるってのはページ遷移ごとにキーがなにか考えなきゃいけないから無駄な思考コストが開発時・運用時ともにかかるわけ。コントローラ側も汚くなる。

# サロゲートキーを使っているケース
$self->model('Client')->find({id => 'client_id'});
# クライアントコードを主キーとして使っているケース
$self->model('Client')->find({client_code => 'client_code'});

URL も汚くなる。クールURIサロゲートキーつかってないと厳しい。複合主キーでURI組み立てるのは難しいよ。どっち先にするのか、とか。クライアントコード振りなおしたら URI が変わるようじゃしょうがない。「クールURIは変わらない」。これ重要URI が変わるようじゃしょうがない。

以上。朝1のサロゲートキーに関する薀蓄でした。

はてなユーザーのみコメントできます。はてなへログインもしくは新規登録をおこなってください。