6

リレーショナルデータベースは、あるテーブルのフィールドが他のテーブルの行にリンクしているデータベースです。このようなものです。

しかし、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のオンを除いて、非リレーショナルデータベースを使用している人のことはほとんど聞いたことがありません。

私は何かが足りないのですか?

4

7 に答える 7

14

リレーショナルの意味について知りたい場合は、CJ Dateの著書「 SQL and Relational Theory 」をお勧めします。

このコンテキストでのリレーショナルは、関係を指しません。これは、基本的に、リレーショナル モデルにつながった数学的理論でテーブルと呼ばれるものである関係を指します。

リレーショナル データベースがユビキタスになった理由は、それらが最小限の冗長性でデータを整理するための最も汎用的なソリューションであるためです。

非リレーショナル ソリューションを使用する正当な理由があります。多くの場合、データ管理の特定のタスクを非常にうまく解決しますが、他の分野では不十分です。一方、SQL およびリレーショナル データベースは妥協点を見つけ、より大きな問題セットを適切に解決し、弱点の領域を少なくします。

リレーショナル モデルに基づいていない現在利用可能なその他のテクノロジは、「次世代データベース」に一覧表示されています。

于 2009-11-06T19:56:20.473 に答える
0

これにより、データを正規化し、冗長性を取り除くことができます。すべてのデータを(Excelスプレッドシートのように)フラットなテーブルに保存するのではなく、異なるデータを別々のテーブルに保存してから、それらを相互に関連付けます。

たとえば、ユーザーをユーザーテーブルに保存し、製品を製品テーブルに保存してから、リレーションシップテーブルを使用して、どのユーザーがどの製品を注文したかを関連付けることができます。

UserA-> ProductA

UserA-> ProductB

UserB-> ProductA

UserC-> ProductB

正規化されたデータでは、データが変更された場合でも、1か所で更新するだけで済みます。ユーザーが名前を変更すると、そのユーザーレコードのみが変更されます。製品価格を上げる必要がある場合は、その製品レコードのみが変更されます。フラットテーブルを調べて、置き換える重複データを探す必要はありません。

于 2009-11-06T19:44:55.567 に答える
0

私はあなたの質問に混乱しています。さまざまなテーブルが互いにどのように関連しているかを追跡することを他にどのように提案しますか?

たとえば、車のリストと人のリストがあり、各車を所有している人を接続する必要があるため、人データベースにcar_ID列があります。これらの関係を追跡することをどのように提案しますか

また、「すべてのクエリはボトルネックであり」、「単純な」クエリのみをキャッシュしたいとします。ただし、複数の小さなクエリを作成する方が、いくつかの小さなクエリを作成するよりもリソースを大量に消費することになると、90%確信しています。また、すべての組み合わせをキャッシュする必要はなく、実際に存在するものだけをキャッシュします。私の例では、このようなクエリの何が問題になっていますか?

SELECT person.*, car.* from person left join on car where person.car_ID = car.ID
于 2009-11-06T19:46:12.480 に答える
0

リレーショナルデータベースは、いくつかの理由で事実上のデータベースになっています。

  1. プライマリ、外部、および一意の制約を設定すると、特定のビジネスルールが最低レベルで適用され、データの統合が保証され、データベースの関係がほぼすべてのレベルのITプロフェッショナルに簡単に理解できるようになります。

  2. 適切に設計されたリレーショナルデータベースは、実際、多くのプロセス(すべてではない)の舞台裏でより高速です。

  3. リレーショナルデータベースのクエリは、習得がかなり速く、実行も簡単です。

  4. リレーショナルデータベースは、データの重複を制限するのに役立ちます。データエンジニアリングの観点からは、これはすばらしいことです。

と他の多くの、しかしこれらは少数です。

于 2009-11-06T19:47:52.813 に答える
0

リレーションを使用しない場合は、多数の列を持つ巨大なテーブルにすべてを格納する必要があります。または、データキューブを使用できます (と思いますか?)

于 2009-11-06T19:51:19.817 に答える
0

Valya、アプリケーション内のデータが追加、更新、または削除されない場合、キャッシュはそれを検索して表示する最速の方法です. 誰もが急いで見ようとしているのに、更新されないこのデータが何なのか知りたいです。たぶん、いくつかの詳細が役立つでしょう。ライトスルー キャッシュを使用してデータベース全体をメモリに保存した人を知っています。彼は、これをやってのけることができる唯一の開発者です。ロケットエンジンを再発明する必要があるかもしれませんし、そうでないかもしれません。

于 2013-11-13T16:44:59.033 に答える
0

リレーションはテーブルの数学用語です。列は互いに関連しています。それ以外の場合、それらは同じテーブルにありませんでした。

たとえば、2 つの数が 3 の倍数異なる場合、それらは相互に関連しています。それらのいくつかを書き留めてみましょう: (0,0)、(1,4)、(2,-1) など。テーブルである行のコレクションが表示されます。

于 2017-10-05T19:06:16.620 に答える