web-dev-qa-db-ja.com

SQLのカーディナリティの定義は何ですか

私の教科書 データベースシステム は、カーディナリティを次のように定義します。

関係のカーディナリティは、関係に含まれるタプルの数です。対照的に、タプルの数は関係のカーディナリティーと呼ばれ、タプルが追加または削除されると、これは変化します。高カーディナリティ-多くのタプル、低カーディナリティ-少数のタプル。

カーディナリティ(SQLステートメント) に関するWikipediaの記事では、次のように定義しています。

カーディナリティとは、データベーステーブルの特定の列(属性)に含まれるデータ値の一意性を指します。カーディナリティが低いほど、列内の重複要素が多くなります。カーディナリティには、高カーディナリティ、通常のカーディナリティ、および低カーディナリティの3つのタイプがあります。

どちらも正しいかもしれませんが、2つの定義を関連する定義として接続できません。言い換えれば明言されます!

14
Tobias Schultz

彼らは同じことを話している、それはタプル(relational algebra)または行(素人の用語)。

高いカーディナリティが特定の属性(またはフィールド)の可能な値であり、一意であるため、行またはタプルの数が多いと示されている場合:

 StudentID   Lastname Firstname  Gender
 101         Smith    John       M
 102         Jones    James      M
 103         Mayo     Ann        F
 104         Jones    George     M
 105         Smith    Suse       F

StudentIDまでは、cardinalityは一意であるため、highになります。これには、5つのタプル/行があります。

一方、Lastnameのカーディナリティは通常であり、特に一意のタプル/行は3つしかありません。したがって、それはnormal cardinality

そして最後にGenderには可能な一意のタプルが2つしかないため、Low Cardinality

おそらく、ここでCardinalityDegreeを、attributes/fieldsリレーション(またはテーブル)。

一方、Databaseの教科書は、Cardinalityについて話すとき、通常、あるエンティティと別のエンティティとの関係に関係しています。つまり、特定の関係タイプ。したがって、たとえばbinary relationshipcardinalityone-to-oneone-to-manyまたはmany-to-many

18
Edper

どちらの定義も、カーディナリティーは「行数」であると言っています。違いは、比較が「テーブル内」であるか「特定の列内」であるかです。

データベースのテキストブックのバージョンは、リレーショナル代数とテーブルの構造(その用語では「リレーション」)に焦点を当てています。

ウィキペディアのエントリの方が実用的です。これには、テーブルに主キーがあると仮定して、テキストブックの定義が含まれます(主キーのカーディナリティはテーブルと同じです)。ただし、フラグカラムなどにも適用できます。フラグが2つの値(01)の場合、列のカーディナリティは2であると言えます。

これはクエリを最適化するために重要です。カーディナリティは、データを結合、集計、選択するための最良の方法を選択する際の1つの要素です。実際には、ほとんどのデータベースは、カーディナリティーよりも多くの情報を使用します。これは、最適化のための列とその値に関する「統計」と呼ばれます。

5
Gordon Linoff

2つの概念があります。

  1. インデックスのカーディナリティ
  2. カーディナリティ

これは、インデックスのカーディナリティを参照していると信じていますが、まったく異なります https://www.ibm.com/developerworks/data/library/techarticle/dm-1309cardinal /

  • インデックスのカーディナリティは、インデックス内の一意の値の数と見なされます
  • この用語は、インデックスの作成、テーブルスキャン、インデックスアクセスとテーブルアクセス、挿入、更新、削除、ストレージスペースへの影響について説明するために使用されます

これが別の例です https://en.wikipedia.org/wiki/Cardinality_(SQL_statements)

  • SQL(構造化クエリ言語)では、カーディナリティという用語は、データベーステーブルの特定の列(属性)に含まれるデータ値の一意性を指します。
  • カーディナリティが低いほど、列内の重複要素が多くなります。したがって、カーディナリティが可能な限り低い列は、すべての行で同じ値になります。 SQLデータベースは基数を使用して、特定のクエリに最適なクエリプランを決定します。

Wordのカーディナリティだけで、テーブル間の関係に焦点を当てていると思います特に、これは単一のテーブルやデータの一意性を説明するために使用される用語ではありません

IBMのドキュメント(独自の単語を検索した場合は記載されていません) https://www.ibm.com/support/knowledgecenter/en/SSEP7J_10.2.2/com.ibm.swg.ba.cognos。 ug_cog_rlp.10.2.2.doc/c_cog_rlp_rel_cardinality.html カーディナリティを解釈するときは、関係の両端に表示される表記を考慮する必要があります。可能な終了ラベルを次のリストに示します。

  • 0..1(ゼロまたは1つの一致)
  • 1..1(正確に1つの一致)
  • 0..n(ゼロ以上の一致)
  • 1..n(1つ以上の一致)

数学では、セットのカーディナリティは「セットの要素数」の尺度です。 (ユニークなbtwの言及なし) https://en.wikipedia.org/wiki/Cardinality

データベース設計では、あるデータアスペクトのカーディナリティまたは基本原則が別のデータアスペクトに対して重要な機能です。各アスペクトがどのようにリンクするかを説明するために、互いの関係は正確かつ正確でなければなりません。リレーショナルモデルでは、テーブルは「1対多」、「多対多」、「1対0または1」などのいずれかとして関連付けることができます。これは、別のテーブルに対する特定のテーブル。 https://en.wikipedia.org/wiki/Cardinality_(data_modeling)

0
VAI Jason

テーブルAとBがある場合、カーディナリティはテーブルAの行に関連するテーブルBの行数と考えてください。テーブルがPERSONとVEHICLEであり、リレーションシップがRODE_ONの場合、カーディナリティは高いので、人は過去に多くの異なる車に乗っていました、そしてほとんどの車は多くの人を運転しました。関係がOWNSの場合、カーディナリティは低くなります。ほとんどの人は1台の車両を所有し、一部の車両は所有していません。また、車両には通常1人または2人の所有者がいます。

リレーションの一方のカーディナリティは、もう一方のカーディナリティと等しくないことに注意してください。テーブルがPERSONとFINGERであり、リレーションシップがBELONG TOの場合、人には多くの指がありますが、各指は1人の人にのみ属しています。

0
alexander zak