DjangoでModelの設定を試していたところ、ORMは複合主キーに対応しないとあった。
ER的にMany to Manyの関係においては関連テーブルを置き、それぞれの主キーを組み合わせてPrimary Keyとする複合主キーが定石だと思っていた。
しかしながら、Djangoでは対応しないのでsurrogate keyを設定する、とある。
Laravelを調べてみたところ、LaravelのORMのEloquent でも同様であった。
ついでに、SymfonyのDoctrineも同様みたい。
できないわけではないのだろうけど、surrogate keyを推奨。
逆に、複合主キーにするメリットはなんなの?という姿勢も見られる。
確かに、データベース上は、主キーの組み合わせを単にUnique Constraintにすれば事足りる。
しかも、データベースでエラーをだすより、事前に重複をチェックする方がスマートだし。
surrogate keyか、重複主キーか、どちらがよいかは議論の分かれるところと思う。
実際、SQLServer + .NET環境で重複主キーが扱いづらいと思ったことはない。
大事なことは、利用するフレームワークが対応できないと言っていること。応じるしかない。
surrogate key採用に変更してもらうように、ベトバンに依頼した。