二種類のcardinalityに注意
データベースやデータモデリングの文脈には2種のcardinality(カーディナリティ/基数)があるのでややこしい。
簡単に整理してまとめておく。
- (1) 一つはUMLでいうmultiplicity(多重度)のこと。
1対多だとか、多対多だとか、0..1対0..N とかのおなじみのやつだ。 - (2) もう1つは列のcardinalityで、列のとりうる値全体の集合の数学的な濃度だ。
こちらのcardinalityはパフォーマンスに影響する。
DBのインデックスはcardinalityが高い列(即ち値の種類が多い列)に貼る必要があるし、 hashテーブルに入れるならキーのcardinalityが十分高い必要がある。
参考資料
-
https://orangematter.solarwinds.com/2020/01/05/what-is-cardinality-in-a-database/
- 2種のcardinality について解説している
-
https://qiita.com/soyanchu/items/034be19a2e3cb87b2efb
- (2)のcardinalityとパフォーマンスへの影響について解説している
- "複合インデックスを貼る時はカーディナリティの高い順に貼っていく"
- "インデックスを作る時の目安は特定のカラム値を指定した時に全体の5%程度に絞り込めるだけのカーディナリティがあること" など参考になる
-
Martin Fowlerの記事 https://martinfowler.com/bliki/MultiplicityNotCardinality.html