RDBMSが結合されたテーブルをネストされた形式で返さないのはなぜですか?
たとえば、ユーザーとそのすべての電話番号とメールアドレスを取得したいとします。電話番号とメールは別々のテーブルに保存されます。1人のユーザーが多くの電話/メールにアクセスします。私はこれを非常に簡単に行うことができます: SELECT * FROM users user LEFT JOIN emails email ON email.user_id=user.id LEFT JOIN phones phone ON phone.user_id=user.id これに関する問題*は、ユーザー名、DOB、お気に入りの色、および各レコード(ユーザーが電話レコードにメールを送信する)についてユーザーテーブルに保存されている他のすべての情報を返し、おそらく帯域幅を消費して速度が低下することです結果をダウン。 ユーザーごとに1つの行を返し、そのレコード内に電子メールのリストと電話のリストがあった方が良いと思いませんか?また、データの操作がはるかに簡単になります。 LINQまたは他のフレームワークを使用してこのような結果を得ることができることは知っていますが、リレーショナルデータベースの基礎となる設計の弱点のようです。 NoSQLを使用してこれを回避することもできますが、中間点はないはずです。 何か不足していますか?これはなぜ存在しないのですか? *はい、このように設計されています。わかった。なぜ作業が簡単な代替手段がないのか疑問に思っています。SQLは実行中の処理を続けることができますが、キーワードまたは2つを追加して、デカルト積ではなくネストされた形式でデータを返す少しの後処理を行うことができます。 選択したスクリプト言語でこれを実行できることはわかっていますが、SQLサーバーが冗長データを送信するか(以下の例)、またはのような複数のクエリを発行する必要がありますSELECT email FROM emails WHERE user_id IN (/* result of first query */)。 MySQLにこれに似た何かを返させる代わりに: [ { "name": "John Smith", "dob": "1945-05-13", "fav_color": "red", "email": "johnsmith45@gmail.com", }, …