SQLの問題の1つは、整合性制約、特に参照制約のサポートレベルが低いことです。
すべての実用的な目的で、テーブルに行を挿入するときに制約を無効にしない限り、SQL制約を使用して問題を解決することはできません。その理由は、SQLではテーブルを一度に1つずつ更新する必要があるため、新しい行が挿入されるたびに制約に違反する必要があるためです。これはSQLの基本的な制限であり、すべての主要なDBMSがSQLの影響を受けます。
いくつかの回避策がありますが、どれも完璧ではありません。 DBMSにDEFERRABLE制約がある場合は、DEFERRABLE制約を使用できます(たとえば、Oracle)。 DEFERRABLE制約は、実際には制約を無効にする簡単な方法です。または、トリガーを使用することもできます。これは、適切なデータベース制約ではなく、手続き的にルールが適用されることを意味します。