データベース分野において、スーパーキーは、関係(リレーション、表)における組(タプル、行)を一意に特定できる属性、または属性の集合を指します。これは、
データベース設計の基礎となる重要な概念です。
スーパーキーは、対象となる関係の全ての属性が関数従属している属性の集合としても定義できます。つまり、スーパーキーに含まれる属性の値が決定すれば、その関係の他の全ての属性の値が一意に定まるということです。この性質により、各行を一意に識別することが可能になります。
スーパーキー、
候補キー、
主キーは、いずれも関係を一意に識別するためのキーですが、その性質には違いがあります。
候補キーは、関係を一意に識別できる最小限の属性集合であり、スーパーキーは、
候補キーに不要な属性を付加した属性集合を含む、より広い概念です。したがって、
候補キーは常にスーパーキーですが、すべてのスーパーキーが
候補キーであるわけではありません。
主キーは、
候補キーの中から、関係を代表するキーとして選ばれるものです。
例えば、ある関係が`市町村(市町村ID, 市町村名, 都道府県名)`という属性を持っていると仮定します。この場合、以下の属性集合はすべてスーパーキーとなります。
`市町村ID`
`{市町村ID, 市町村名}`
`{市町村ID, 都道府県名}`
`{市町村ID, 市町村名, 都道府県名}`
* `{市町村名, 都道府県名}`
これらの例からわかるように、スーパーキーは、関係を識別するのに必要な属性だけでなく、冗長な属性を含んでいても良い点が特徴です。 `市町村ID`単独で市町村を一意に識別できるため、`{市町村ID, 市町村名}`や `{市町村ID, 都道府県名}` もスーパーキーとなります。 また、3つの属性全てを含む`{市町村ID, 市町村名, 都道府県名}`もスーパーキーです。`{市町村名, 都道府県名}`も組み合わせで市町村を特定できるためスーパーキーになります。
スーパーキーが、既約である場合、すなわち冗長性がなく、それ以上属性を減らすと一意性を保てない場合、そのスーパーキーは
候補キーとなります。上記の例では、`市町村ID` が
候補キーです。もし、`市町村名`と`都道府県名`の組み合わせで市町村を一意に特定できる場合は、`{市町村名, 都道府県名}`も
候補キーとなりえます。
関係のすべての属性からなる集合は、その関係が基底関係であろうと導出関係(ビュー)であろうと、常にスーパーキーとなります。なぜなら、その関係に存在する全ての属性の値が分かれば、その行を一意に識別できるからです。
スーパーキーは、
データベースの正規化を行う上で重要な役割を果たします。データの重複を排除し、整合性を保つためには、関係における適切なキーを理解し、適用することが不可欠です。スーパーキーを正しく理解することで、
データベースの設計者は、より効率的で信頼性の高いシステムを構築することができるでしょう。
具体例として、別の関係で考えてみましょう。例えば、`従業員(従業員ID, 氏名, 所属部署, 入社日)`という関係がある場合、`従業員ID`はスーパーキーです。なぜなら、`従業員ID`が分かれば、その従業員の他の情報(氏名、所属部署、入社日)が一意に決まるからです。この関係では、`{従業員ID, 氏名}`や`{従業員ID, 所属部署}`、`{従業員ID, 氏名, 所属部署, 入社日}`もスーパーキーです。このように、スーパーキーは、対象となる関係の全ての行を一意に特定できる属性または属性の集合を指します。これは、
データベース設計において基本となる重要な概念です。