質問: active_record で複数カラムプライマリキーを利用しようとすると、以下のように怒られます。 ``` WARNING: Active Record does not support composite primary key. order_history has composite primary key. Composite primary key is ignored. ``` これの結果として何が起こるかというと、 find メソッドなどが利用できなくなります。 すべてのテーブルは単一 PK にしてしまえばいいかとも思いますが、少し考えると、確かに複数のコードによって PK にしたくなるようなテーブルはあるかなと思っています。 少し考えてみた具体例、もうちょっといい例があるかもしれませんが。。: * 外部アカウント管理テーブルにて、「外部サイトコード」 + 「外部サイトで利用しているアカウント名称」 ここまで考えて、これから rails でアプリケーションを開発していくとした場合に、以下の疑問が発生しました。 ### 質問 * rails 的には、これからテーブル定義を作っていく段階においては、複数カラムプライマリキーのテーブルは作るべきではないのでしょうか? * 逆に、複数カラムプライマリキーが自然だと考えられるテーブルをあえて id カラム追加して普通の単一プライマリキーテーブルにするにあたって、何かデメリットなどは考えられますか? + あるならば、どういう性質をもったテーブルだとそのデメリットが発生しますか?
回答: > > rails 的には、これからテーブル定義を作っていく段階においては、複数カラムプライマリキーのテーブルは作るべきではないのでしょうか? > > > Railsの流儀は「主キーは自動採番される`id`カラムにする」です。必要があれば流儀から外れることも出来ますがもれなく苦労も付いてきます > > 逆に、複数カラムプライマリキーが自然だと考えられるテーブルをあえて id カラム追加して普通の単一プライマリキーテーブルにするにあたって、何かデメリットなどは考えられますか? > > > * 不要なカラムにまつわる諸々のコストが発生する * 外部キー制約を本来あるべき形で設定できない ナチュラルキー/サロゲートキー論争は古くからある議論なので、詳しくはDBやSQLの書籍を読んでみると良いでしょう