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 カラム追加して普通の単一プライマリキーテーブルにするにあたって、何かデメリットなどは考えられますか?
    • あるならば、どういう性質をもったテーブルだとそのデメリットが発生しますか?