[데이터베이스] Key의 종류와 역할

Yoon Uk·2023년 3월 4일
0

데이터베이스

목록 보기
1/20
post-thumbnail

참고 - YouTube: 쉬운코드

1. 개요

최소성과 유일성

유일성

하나의 키값으로 튜플을 유일하게 식별할 수 있는 성질을 말합니다.

여러 개의 튜플이 존재할 때 각각의 튜플을 서로 구분할 수 있는 속성이 존재해야 합니다.
한 마디로 말하자면, 각각의 튜플은 유일해야 한다는 뜻입니다.

예를 들어 어떤 릴레이션에 (주민번호, 나이, 사는 곳, 혈액형) 이라는 속성이 존재한다고 하면,
이 때, 나이, 사는 곳, 혈액형은 모두 충분히 중복될 수 있는 속성들입니다.

하지만 주민번호는 모두 다르기 때문에 주민번호 속성에서 중복은 절대 발생할 수 없습니다.
이 릴레이션에서 키는 주민번호로 지정될 것이며, 이렇게 각각의 튜플을 구분할 수 있는 성질을 유일성이라고 표현합니다.

최소성

키를 구성하는 속성들 중 가장 최소로 필요한 속성들로만 키를 구성하는 성질을 말합니다.

쉽게 말해, 키를 구성하고 있는 속성들이 진짜 각 튜플을 구분하는 데 꼭 필요한 속성들로만 구성되어 있는지를 의미합니다.

예를 들어 위와 같이 (주민번호, 나이, 사는 곳, 혈액형) 릴레이션에서 (주민번호, 나이) 가 키로 지정이 되어 있다면, 당연히 이 키는 각 튜플을 구분할 수 있습니다.

주민번호와 나이가 모두 같은 사람은 세상에 존재하지 않기 때문에 그렇게 말할 수 있지만, 더 간단하게 주민번호가 중복되는 사람은 세상에 존재하지 않습니다.

그렇기 때문에 (주민번호, 나이) 로 지정된 키는 최소성을 만족하지 않고 키에서 나이를 뺀 주민번호 만 키로 지정이 될 경우, 이 키는 최소성을 만족한다고 할 수 있습니다.


데이터베이스에서 Key란 무엇인가?

데이터베이스에서 Key란, 데이터베이스 내에서 각각의 레코드를 구분하기 위한 값 또는 속성(열)을 의미합니다.
즉, Key레코드 간 구분을 위한 식별자 역할을 합니다.
데이터베이스에서 Key는 데이터의 일관성과 무결성을 보장하기 위한 중요한 역할을 수행하며, 데이터베이스를 설계하고 구현할 때 매우 중요한 개념입니다.

데이터베이스에서 Key는 다음과 같이 종류가 있습니다.

  • SuperKey(슈퍼키)
  • CandidateKey(후보키)
  • PrimaryKey(기본키)
  • AlternateKey(대체키)
  • UniqueKey
  • Foreign Key(외래키)

참고: https://ggop-n.tistory.com/78


Key의 역할

아래는 Key가 수행하는 역할에 대한 구체적인 설명입니다.

  1. 레코드 구분
    데이터베이스 내에 저장된 레코드 각각은 유일한 Key 값을 가지고 있습니다.
    이를 통해 각각의 레코드를 구분할 수 있으며, 데이터의 중복을 방지합니다.

  2. 무결성 제약 조건 보장
    Key를 이용하여 데이터의 일관성과 무결성을 보장할 수 있습니다.
    데이터베이스 내의 모든 레코드는 Key 값을 가지고 있으며, 이를 이용하여 특정 조건을 만족하지 않는 레코드를 필터링하거나, 관련 테이블 간의 무결성 제약 조건을 설정할 수 있습니다.

  3. 레코드 검색 및 정렬
    Key를 이용하면 데이터베이스 내에서 빠르고 정확한 레코드 검색 및 정렬이 가능합니다. 데이터베이스 시스템은 Key를 이용하여 레코드를 찾거나 정렬할 수 있으며, 이를 통해 데이터 검색과 분석을 수행할 수 있습니다.

  4. 관계형 데이터베이스에서의 레코드 연결
    관계형 데이터베이스에서는 PrimaryKeyForeignKey를 이용하여 레코드 간의 관계를 설정합니다. PrimaryKey는 해당 테이블의 레코드를 유일하게 식별하는 Key로 사용되며, ForeignKey는 다른 테이블의 Primary Key를 참조하는 Key로 사용됩니다.
    이를 통해 두 테이블 간의 관계를 설정하고 데이터를 효율적으로 관리할 수 있습니다.

  5. 인덱스 생성 및 검색
    데이터베이스에서 자주 사용되는 컬럼을 인덱스로 설정하여 검색 시간을 단축시킬 수 있습니다.
    이 때 인덱스Key 값을 기반으로 생성되며, 이를 이용하여 데이터 검색 시간을 단축시킵니다.

  6. 데이터의 보안 유지
    Key 값을 이용하여 데이터의 보안을 유지할 수 있습니다.
    데이터베이스 내에서 중요한 정보를 보호하기 위해 해당 데이터에 접근할 수 있는 사용자를 제한하거나, 암호화된 Key를 사용할 수 있습니다.

위와 같이 Key는 데이터베이스에서 매우 중요한 역할을 수행합니다.
데이터베이스를 설계하고 구현할 때는 이러한 Key를 적절하게 설정하여 데이터의 일관성과 무결성을 보장하고, 데이터의 검색 및 관리를 효율적으로 수행할 수 있도록 해야합니다.


2. SuperKey(슈퍼키)

유일성 O, 최소성 X

SuperKey란 무엇인가?

각 릴레이션(테이블)에서 튜플(행)을 유일하게 식별할 수 있는 속성(열, attribute) 또는 속성의 집합입니다.
이는 테이블에서 중복을 허용하지 않는 고유 식별자와 같은 역할을 합니다.

Superkey는 릴레이션에서 하나 이상의 존재할 수 있습니다.
또한, Superkey 중에서 최소한의 속성으로 구성된 것을 Minimal Superkey라고 합니다.
Minimal Superkey는 유일성과 최소성을 모두 만족시키며, 테이블의 기본키(primary key)로 사용됩니다.

SuperKey의 예시

Player 테이블에서 id, name 조합은 각 학생을 고유하게 식별할 수 있는 Superkey가 될 수 있습니다.
이 경우, id나 name 중 어느 하나만으로도 학생을 고유하게 식별할 수 있지만, 두 개의 속성을 함께 사용하면 더 강력한 식별력을 가지게 됩니다.

PLAYER(id, name, team_id, back_number, birth_date)superkey

{id, name, team_id, back_number, birth_date}
{id, name}
{name, team_id, back_number}
... etc

3. CandidateKey(후보키)

유일성 O, 최소성 O

CandidateKey란 무엇인가?

Superkey 중에서 유일성(uniqueness)을 만족하는 속성(열) 또는 속성의 집합입니다.
즉, 테이블의 모든 튜플을 고유하게 식별할 수 있는 속성들의 집합을 의미합니다.

CandidateKeySuperkey와 달리 유일성을 만족하는 최소한의 속성 집합을 의미합니다.
즉, 하나의 테이블에서 여러 개의 Candidate Key가 존재할 수 있으며, 이 중에서 기본키(Primary Key)로 사용할 속성 집합을 선택할 수 있습니다.

CandidateKey는 테이블을 설계할 때 중요한 개념 중 하나이며, 데이터베이스의 정규화(normalization) 과정에서 중요한 역할을 합니다.

CandidateKey의 예시

Player 테이블에서 id와 team_id, back_number 조합은 모두 튜플을 유일하게 식별할 수 있는 CandidateKey가 될 수 있습니다.

PLAYER(id, name, team_id, back_number, birth_date)candidateKey

{id}
{team_id, back_number}

4. PrimaryKey(기본키)

후보키 중 선택받은 키

PrimaryKey란 무엇인가?

테이블에서 특정 행(row)을 고유하게 식별할 수 있는 하나의 속성(열) 또는 속성의 집합입니다.
즉, PrimaryKey는 테이블의 모든 행을 고유하게 식별할 수 있는 유일한 식별자(identifier)입니다.

PrimaryKey테이블에서 반드시 하나만 존재해야 하며, 해당 테이블의 모든 행에 대해 유일하고 NULL 값을 포함하지 않아야 합니다.
PrimaryKey로 지정된 속성(열)은 반드시 유일성 제약 조건(unique constraint)을 가져야 합니다.

PrimaryKey는 테이블을 설계할 때 중요한 역할을 합니다. 이는 테이블에서 데이터를 조회, 수정, 삭제할 때 특정 행을 고유하게 식별할 수 있도록 해주기 때문입니다.
또한, PrimaryKey를 이용하여 다른 테이블과의 관계를 정의하는 외래키(foreign key)를 설정할 수 있습니다.

PrimaryKey는 보통 테이블에서 자동으로 생성되는 일련번호(serial number), GUID(Globally Unique Identifier), 또는 유일성이 보장되는 다른 속성을 사용하여 정의됩니다.

PrimaryKey의 예시

PLAYER(id, name, team_id, back_number, birth_date)PrimaryKey

{id} or {team_id, back_number}

5. AlternateKey(대체키)

후보키 중 선택받지 못한 키

AlternateKey란 무엇인가?

테이블 내에서 PrimaryKey를 제외한 나머지 Key를 말합니다.
즉, 테이블 내에서 유일성을 보장하는 Key이지만, PrimaryKey로 사용되지 않은 Key를 의미합니다.

AlternateKeyPrimaryKey로 사용될 수 없지만, 다른 테이블에서 ForeignKey로 사용될 수 있습니다. 따라서, 테이블 간의 관계를 설정하는 데 사용될 수 있습니다.

AlternateKey를 사용할 때에도 유일성을 보장해야 합니다.
따라서, 데이터베이스에서 중복을 제거하기 위해 AlternateKey를 선택할 때에는 유일성을 보장하는 Key를 선택해야합니다.

AlternateKey의 예시

Order(주문) 테이블에서 order_id(주문 ID)PrimaryKey인 경우, customer_id(고객 ID)와 같은 다른 Key는 AlternateKey가 됩니다.

ORDER(order_id, customer_id, menu, cost)AlternateKey

{customer_id} ...

6. UniqueKey

UniqueKey란 무엇인가?

테이블에서 특정 속성(열) 또는 속성의 집합에 대해 유일성(uniqueness)을 강제하는 제약 조건(constraint)입니다.
즉, UniqueKey로 지정된 속성(열)은 해당 속성에 대해 중복된 값을 허용하지 않습니다.

UniqueKeyPrimaryKey와 유사한 역할을 합니다.
하지만, PrimaryKey는 해당 테이블에서 반드시 하나만 존재하며 NULL 값을 허용하지 않아야 하지만, UniqueKey여러 개의 속성을 조합하여 지정할 수 있으며, NULL 값을 포함할 수 있습니다.

UniqueKey테이블에서 중복된 값을 허용하지 않아야 하는 경우에 사용됩니다.

UniqueKey는 테이블을 설계할 때 중요한 역할을 합니다. 이는 데이터의 일관성과 무결성을 유지하기 위해 중요하기 때문입니다.
또한, UniqueKey를 이용하여 다른 테이블과의 관계를 정의하는 외래키(foreign key)를 설정할 수 있습니다.

UniqueKey의 예시

사용자 테이블에서 team_id, back_number는 중복되면 안 되기 때문에 UniqueKey로 지정할 수 있습니다.

PLAYER(id, name, team_id, back_number, birth_date)UniqueKey

{team_id, back_number}

7. ForeignKey(외래키)

다른 릴레이션의 기본키를 참조

ForeignKey란 무엇인가?

ForeignKey는 한 테이블의 PrimaryKey를 다른 테이블의 특정 속성(열)과 연결하는 역할을 합니다.

즉, ForeignKey는 다른 테이블의 PrimaryKey를 참조(reference)하는 속성(열)입니다.
이를 통해 한 테이블의 데이터를 다른 테이블과 연결할 수 있습니다.
ForeignKey를 가지고 있는 테이블을 참조하는 테이블이라고 부르며, 이를 참조하는 테이블에서는 ForeignKeyPrimaryKey가 동일한 값이어야 합니다.

ForeignKey를 이용하여 두 개 이상의 테이블을 연결하면, 데이터를 보다 효율적으로 관리할 수 있습니다.

ForeignKey의 예시

PLAYER 테이블에서는 TEAM 테이블team_id를 참조하는 ForeignKey를 설정할 수 있습니다.

PLAYER(id, name, team_id, back_number, birth_date)
TEAM(id, name, manager)가 있을 때 ForeignKey

{team_id}

0개의 댓글