2016-05-14 6 views
-1

大きなテーブルレコードは複合キーによって識別されますが、このキーのコンポーネントは何ですか?それを複合化するメリットは何ですか?大きなテーブルと複合キー

+0

「このキー」はどのキーですか? – philipxy

+0

<複合キー> – Abdussalam

+0

あなたの質問は不明です。あなたは "コンポジットキーのコンポーネント"が何を意味するのか尋ねていますか? – philipxy

答えて

1

非常に大きなテーブル(行ごと)の場合、個々の行に一意のIDを与えることは、一意のIDを表すデータ型によって制限されます。たとえば、一意のIDを基本的なint32として格納する場合、2147483647個以上のエントリ(最大値はint32)があるとどうなりますか?

Amazonの例を使って、顧客が見たアイテムを追跡しようとします。あなたは "items_customer_has_viewed"というテーブルを想像することができます。単一の顧客の場合、このテーブルの一意のIDを持つことは問題にはなりません。たぶん顧客は1年でアマゾンで50アイテムしか見ないかもしれませんし、そのデータベースは2147483647の制限にとどまり、しばらくの間は小さく留まることができます。しかし、何百万人ものユーザーがいる場合、一意のIDの値が大きくなりすぎます。

一意のIDを文字列またはBLOBとして保存することもできますが、データベースが遅くなり、追加の計算が必要になります。

解決策は、複合キーを使用することです。 1つの「ビュー」または「顧客が見たアイテム」を識別する一意のIDを持つ代わりに、2つの外部キー(一緒になって1つの複合プライマリキーを形成)で「ビュー」を識別します。今は2147483647人の顧客と2147483647人未満の商品しか必要とせず、あなたは大丈夫です。 IDの格納に問題はありません。

+0

このような理由から、ほとんどのデータベースでは、非常に大きな数値データ型が許可されるため、文字列、ブロブ、または複合キーを使用する必要はありません。たとえば、PostgreSQLシーケンスはデフォルトで2^63-1まで生成され、大きな整数型は9,223,372,036,854,775,807までの範囲です。数値型は、小数点の前に131,072桁まで扱います。ですから、そのようなトリックの1つを使用してその行を格納する必要がある場合、データベースの選択肢は非常に貧弱です。 –

関連する問題