カーディナリティて何ですの

データベースまわりでカーディナリティとか濃度という言葉がバラバラの意味で使われているので整理する。
以下の3種類の使われ方がある。


1. relationのカーディナリティリレーション中のタプルの数(不正確に言えばテーブル中のレコード数)をカーディナリティという場合。
これが原義。
Date「データベースシステム概論」P-90

一つの組(tuple)は表の一つの行に対応し、一つの属性(attribute)は一つの列に対応している。
組の数は濃度(cardinality)とよばれ、属性の数は次数(degree)とよばれる。


2. relationshipのカーディナリティエンティティ間の関係が1対1・1対多・多対多のどれか、ということをカーディナリティという場合。


3. キーのカーディナリティキーの値の数と、全レコード件数との比を、カーディナリティという場合。
日本語の「濃度」のイメージに近いのでわかりやすいような、そうでもないような。

http://www.oracle.co.jp/interactive/Techniques/VLDB/Dss/step0302.html
ビットマップ索引の効果を左右するのは「カーディナリティ」です。
「カーディナリティが低い」とは、索引キーの値が行数に比べて少ない種類の値しか取らないこと
を意味します。例えば「性別」は「男」「女」の2種類の値のいずれかになりますが、これは最も
カーディナリティの低いデータの例だといえます。
「行数に比較して少ない種類の値」というところがポイントです。値が2種類しかなくても、行数が
2行しかなければカーディナリティが低いとはいえません。また1万種類の値を取るデータでも、
行数が数億行あれば十分カーディナリティは低いといえます。


変な用語だなあと思っていたが、これはもともとは集合論から来てる言葉なのね。
無限集合については、こっちの無限のがあっちより要素数が多いとか少ないとか言えないので、(カントールが?)無限集合同士の「大きさ」の比較をするために濃度という概念を立てた。
この概念がRDBの理論にも入ってきたけど実装上は無限のレコード数を持ったテーブルなんてないから、1の意味で濃度なんて言われるとぴんと来ない。
2,3はどこから来た使いかたなのだろう。3なんかは「濃度」という言葉の日常的な意味から来た誤用のような気がするけど。