上記のコメントに書いた:
「データベースシステムの基礎」という本[...]には[...]と書かれていますが、外部キー列に多くのNULL値がある場合(たとえば:従業員の98%部門を管理しないでください)
外部キー列に多くのNULL値がある場合、プログラムは処理するレコードごとにこのほとんど空の列を処理する必要があります。すべてのケースの98%が空であるにもかかわらず、列はおそらくディスクスペースを占有します。関係のクエリとは、より多くのネットワークトラフィックを提供する列をクエリすることを意味し、テーブルからクラスを生成するORMを使用している場合、プログラムまた、クライアント側に必要以上のスペースが必要です。交差テーブルを使用すると、これを回避できます。そうしないと、同等の外部キーがNULLにならない場合に必要なリンクレコードのみが存在します。
それとは反対に、NULL値が少数ではない場合、50%以上のリレーションがNULLでないとすると、交差テーブルを使用すると逆の効果が得られます-より多くのディスクスペース、より複雑なネットワークトラフィックなど。
そのため、交差テーブルの使用は最適化の一形態にすぎず、特定の場合にのみ意味があります。特に最近では、ディスク容量とメモリが安くなり、必要性がはるかに低くなりました。「データベースシステムの基礎」は、もともと20年以上前に書かれていることに注意してください(1994年からの第2版への参照を見つけました)。1994年以前は、大容量記憶装置は依然として高価であり、コンピューターとネットワークは今日よりもずっと低速だったため、スペースの最適化はおそらく今日よりもはるかに重要でした。
慎重なコメントへの補足として:上記のステートメントは、「データベースシステムの基礎」の著者が彼の勧告で念頭に置いていたものを予想しようとしているだけであり、ほとんどのシステムに有効な大まかな一般的なステートメントを作成していると思います。一部のデータベースには、交差テーブルの使用をさらに時代遅れにする「スパース列」のような他の可能な最適化があります。
したがって、その推奨事項を間違って取得しないでください。この本は{0,1}:n
、一般的なリレーションシップのために交差テーブルを好むように、または、あなたが書いたように、これが「正しい方法」であることをあなたに教えません。このような最適化を使用すると、本当に必要な場合にのみプログラムが複雑になります。