次のような方法でエンティティ (たとえばuser ) を複数のテーブルに分散するのはなぜですか。
user(user_id, username)
user_tel(user_id, tel_no)
user_addr(user_id, addr)
user_details(user_id, details)
この DB 設計から得られるスピードアップ ボーナスはありますか? 連鎖結合を実行してデータを取得することは、選択プロジェクションを使用するよりも計り知れないほど悪いように思われるため、非常に直感に反します..
もちろん、user_id とユーザー名のみを使用して他のクエリを実行すると、速度が向上しますが、それだけの価値があるでしょうか? では、真の利点はどこにあり、そのような DB 設計戦略に適した互換性のある作業シナリオは何でしょうか?
後の編集:この投稿の詳細では、属性が量的に変化しない完全で一意のエンティティを想定してください (たとえば、車の色は 2 つではなく 1 つだけであり、ユーザーはユーザー名/社会的秒番号/入学番号を 1 つだけ持っています)。 /home address/email/etc.. つまり、1 対多の関係ではなく、1 対 1 の完全に一貫したエンティティの説明を扱っています。上の例では、これがまさにそのケースです。単一のテーブルが、それが持っていた非主キー列と同じ数のテーブルに「分割」されています。