「リレーショナル データベース」の「リレーショナル」とは私たちにとって何を意味するのでしょうか?
-
18-09-2019 - |
質問
リレーショナル データベースは、あるテーブルのフィールドが他のテーブルの行にリンクしているデータベースです。このようなものです。
しかし、Web 開発者である私にとってそれが何を意味するのか理解できません。
私の知っているように、結合とネストされた選択を含むクエリはパフォーマンスを低下させる可能性があります (特に数十の結合を含む Drupal スタイルのクエリ)。さらに、DB へのクエリがボトルネックになるため、すべての選択リクエストをキャッシュする必要があるユーザーが多数存在します。
すべての選択リクエストをキャッシュする場合は、複雑なリクエストよりも単純なリクエストをキャッシュすることをお勧めします。「select * from tbl1 where id = 123」と「select * from tbl2 where id = 456」または「select * from tbl1, tbl2 where ...」のいずれかをキャッシュできますが、2 番目の方法を選択すると、オブジェクトのすべての組み合わせをキャッシュする必要がありますが、それはクールではありません。
さて、ここでは「select * from tbl1 where id = 123」や「select id from tbl1 order by id limit 0, 30」などの非常に単純なクエリのみを使用し、それらをキャッシュします (または、最初のタイプのクエリのみをキャッシュしても構いません) )。クエリと同様に単純な INSERT、DELETE、UPDATE はすべて必要なものであり、私たちが使用するものです。
ご覧のとおり、すべてのリレーショナル ロジックは SQL ではなく、アプリケーションのメイン言語で行われています。では、なぜこのような関係的なことが必要なのでしょうか?どういう意味でしょうか?「リレーショナル」タイプには、他のタイプにはないが必要なものは何があるでしょうか?リレーショナル機能を使用しないのであれば、たとえパフォーマンスを気にしていても、なぜ誰もが依然として MySQL やその他のリレーショナル データベースを使用するのでしょうか?
このタイプのデータベースは標準になっています。なぜ?私は見当もつかない。GAE の場合を除いて、非リレーショナル データベースを使用している人についてはほとんど聞いたことがありません。
何かが足りないのでしょうか?
解決
リレーショナルの意味について知りたい場合は、「リレーショナル」という本をお勧めします。SQL とリレーショナル理論「 by C.J.日付。
この文脈におけるリレーショナル しません 関係を指します。それは、 関係 これらは基本的に、 リレーショナルモデル.
リレーショナル データベースが普及した理由は、リレーショナル データベースが冗長性を最小限に抑えてデータを編成するための最も汎用的なソリューションだからです。
非リレーショナル ソリューションを使用する正当な理由があります。多くの場合、データ管理の特定のタスクを非常にうまく解決しますが、他の領域では苦手です。SQL とリレーショナル データベースは妥協点を見出し、弱点領域を減らしながら、より多くの問題を適切に解決します。
リレーショナル モデルに基づいていない現在利用可能なその他のテクノロジは、「」にリストされています。次世代データベース."
他のヒント
私はあなたの質問で混乱しています。他にどのようにあなたには、あなたが互いにどのように関係するかをさまざまなテーブルを追跡するの提案?
たとえば、私は車のリスト、および人々のリストを持っている、と私は、人はそれぞれの車を所有している接続する必要があるので、私は人のデータベース内car_ID列を持っています。これらの関係を追跡する提案する方法
また、あなたは「すべてのクエリがボトルネックです」とあなただけの「シンプル」クエリをキャッシュするキャッシュしたいと言います。しかし、私は複数の小さなクエリを作成すると、いくつかの小さなクエリを作るより多くのリソースが消費されることを90%確信しています。あなたはまた、すべての組み合わせ、実際に存在するものだけをキャッシュする必要はありません。私の例では、このようなクエリと間違って何ですか?
SELECT person.*, car.* from person left join on car where person.car_ID = car.ID
リレーショナル データベースは、さまざまな理由から事実上のデータベースになりました。
プライマリ制約、外部制約、および一意制約を設定すると、特定のビジネス ルールが最低レベルで適用され、データの整合性が確保され、データベースの関係がほぼすべてのレベルの IT プロフェッショナルにとって容易に理解できるようになります。
実際、適切に設計されたリレーショナル データベースは、多くのプロセス (すべてではありません) のバックグラウンドで高速になります。
リレーショナル データベースのクエリは非常にすぐに習得でき、実行も簡単です。
リレーショナル データベースはデータの重複を制限するのに役立ち、データ エンジニアリングの観点からすると、これは素晴らしいことです。
他にもたくさんありますが、これらはほんの一部です。
、あなたは列の多数の数で巨大なテーブル内のすべてのものを保存する必要があります。それとも、(私が思う?)
データキューブを使用することができますそれはあなたのデータを正規化し、redanancyを削除することができます。 (Excelスプレッドシートのような)平らなテーブル内の全てのデータを格納するのではなく、あなたが別々のテーブルに異なるデータを格納し、相互にそれらを関連付ける。
たとえば、ProductsテーブルにUsersテーブル内のユーザーと製品を格納し、ユーザーがどの製品を注文した関係する関係テーブルを使用することができます。
データの変更は、それが唯一の場所で更新する必要がある場合は、ユーザーA - > ProductA
ユーザーA - > ProductB
ユーザーB - > ProductA
よびUserC - > ProductB
正規化されたデータと、それは意味します。ユーザーは、そのユーザーだけレコードの変更を自分の名前を変更した場合。製品価格は、唯一その製品レコードの変更を提起する必要がある場合。あなたは交換する重複データを探して、あなたの平らなテーブルを磨く必要はありません。
Valyaは、アプリケーション内のデータは、に追加更新または削除されることはありません場合は、キャッシュは、それを検索し、表示するための最速の方法です。私は、このデータは、誰もが参照するには、このような急いでいることが何であるかを知りたいですが、更新されないのだろうか?たぶん、いくつかの詳細は役立つだろう。 私はライトスルーキャッシュとメモリに彼の全体のデータベースを格納し、誰かを知っている、とはい、それが飛びました!彼は私がこれをやってのけることができる人を知っている唯一の開発者です。たぶん、あなたはロケットエンジンを改革する必要がある、と多分あなたにはありません。
の関係は、テーブルのための数学的な言葉です。列がそうでなければ、それらが同じテーブルではなかった、相互に関係している。
彼らは3の倍数を異なる場合たとえば、2つの数字が互いに関係しているのは、それらのいくつかを書き留めてみましょう:(0,0)、(1,4)、(2、-1)、など。あなたが行のコレクションを参照してくださいテーブルである、表示されます。