サロゲートキーと一緒に話題になることの多いものです。DBFluteではサロゲートキーで複合主キーを排除することが推奨されています。サロゲートキーと複合主キーただし、それでも現実には複合主キーと対面することは多いものです。運用しているシステムでDB変更が多くて、メンテナンスが大変なのでDBFluteに切り替える、ということでレガシーシステムにも採用されることが珍しくありません。DBFluteでは、複合主キーによるフレームワークのサービスの低下を最小限食い止めるようにしています。複合主キーによる機能制限そもそも、どのような機能に制限が出るのか、以下の通りです。利用できない主には、サブクエリ(特にInScopeのサブクエリ)を使って実現する機能が軒並み利用できなくなります。実装コストを掛ければ対応できそうなものもあれば、相当の実装コストを掛けても実現が難しいものもあります。複合主キーへのできるだけの対応それでも、できるだけの対応をしています。結合条件は単一であろうが複合であろうが意識せずに実装できます。結合条件における条件落ちを防ぐことができます。できなかったものですが、よく使われる機能なので対応しています。相関サブクエリ条件における条件落ちを防ぐことができます。対応こちらも、もともとできなかったものですが、よく使われる機能なので対応しています。幾つかのPK抽象化メソッドをがあります。PKの条件落ちのバグなどを比較的抑えやすい機能です。複合主キー対応のジレンマフレームワークとしては、こういった推奨されない環境(少なくとものそのフレームワークでは)に対する対応をどこまでするのか、常にジレンマがあります。複合主キー対応は、フレームワーク開発における意識の矛盾の代表的な例です。DBFluteを利用することによる別のレイヤへの制限を(できるだけ)発生させたくないDBFluteで対応してるからって、何も考えずに複合主キーを許容してもらいたくないこの二つは常に対立します。複合主キーの問題に限りません。自動生成ツール一体型なので、比較的柔軟性があります。オプションで非推奨の環境にも対応できる、という形を心がけています。DeveloperEnvironmentSetupUpgradeManual。