あなたは非常に興味深い質問をします。
「関係代数」の「関係」は、テーブル間の関係ではなく、名前と値のペアを指します。関係代数では、セット(テーブル)内のすべてのレコードが同じ列を持つ必要はありません。
私の推測では、制限は実体関連図のアイデアに関連していると思います。データベースはテーブルを中心に設計されており、これらのテーブルは相互に関係があります。データの保存とアクセスのためのリレーショナルデータベースの選択は、特にデータをこの方法で保存できる場合でした。エンティティとその属性を知ることは、データの静的な形式、したがってクエリでの静的な参照を示唆します。
さらに、言語としてのSQLは、手続き型言語ではなく宣言型言語です。これは、クエリの実行とは別のコンパイル手順を示唆していますが、強制はしていません。一般に、SQLエンジンは次のことを行います(非常に高いレベルで)。
- クエリをコンパイルします。通常、ある種のデータフロープロセスにコンパイルします。
- データフロープロセスを最適化します。(通常、コンパイルプロセスの一部です。)
- クエリを実行します。
最初の2つは、いわゆる「クエリプラン」になります。ただし、操作しているオブジェクトについて知らない限り、最適化を行うことはできません。したがって、テーブルと列を動的に選択するということは、最適化がクエリのコンパイルではなく実行の一部になることを意味します。
最後に、SQLServerなどの一部のデータベースは動的SQLをサポートしています。これにより、コンパイルと実行を同時に行う文字列を作成できます。これは、複雑な意思決定支援クエリに非常に役立ちます。高速なトランザクションスループットが必要な場合は、クエリに比べてコンパイルのオーバーヘッドが高すぎるため、お勧めしません。