5월24일 - Database Keys

Yullgiii·2024년 5월 25일
0
post-thumbnail

Understanding Key Concepts in Relational Databases

데이터베이스에서 키(Key)는 검색이나 정렬 시 Tuple(튜플)을 구분할 수 있는 기준이 되는 Attribute(속성)이다.

Candidate Key(후보키)

후보키는 릴레이션을 구성하는 속성들 중에서 Tuple을 유일하게 식별할 수 있는 속성들의 부분 집합을 의미한다. 기본키로 사용할 수 있는 속성들을 후보키라 하며, 모든 릴레이션은 반드시 하나 이상의 후보 키를 가져야 한다. 후보키는 아래 두 가지 조건을 만족해야 한다.

  • 유일성: Key로 하나의 Tuple을 유일하게 식별할 수 있다.
  • 최소성: 꼭 필요한 속성으로만 구성된다.

EX)

[학생] 릴레이션에서 학번이나 주민번호는 다른 레코드를 유일하게 구별할 수 있는 기본키로 사용할 수 있으므로 후보키가 될 수 있다. 즉, 기본키가 될 수 있는 키들을 후보키라 한다.

Primary Key(기본키)

기본키는 후보키 중에서 선택된 Main key이다. 한 릴레이션에서 특정 튜플을 유일하게 구별할 수 있는 속성으로, Null 값을 가질 수 없으며 동일한 값이 중복되어 저장될 수 없다. 기본키는 다음 조건을 만족해야 한다.

  • 유일성: 기본키를 구성하는 컬럼은 테이블에서 레코드를 식별할 수 있도록 유일해야 한다.
  • 최소성: 유일성을 만족하는 한도 내에서 최소한의 컬럼(하나 이상)으로 구성되어야 한다.
  • 개체 무결성: 기본키가 가지고 있는 값의 유일성을 보장받아야 한다.

EX)

[학생] 릴레이션에는 학번이나 주민번호가 기본키가 될 수 있고, [수강] 릴레이션에는 학번+과목명으로 조합해야 기본키가 만들어질 수 있다. 왜냐하면 [수강] 릴레이션에서는 학번 속성과 과목명 속성은 개별적으로 기본키로 사용할 수 없다. 다른 튜플들과 구별되지 않기 때문이다.

Alternate Key(대체키)

후보키가 둘 이상일 때, 기본키를 제외한 나머지 후보키들을 대체키 또는 보조키라고 한다.

EX)

[학생] 릴레이션에서 학번을 기본키로 정하면 주민번호는 대체키가 된다.

Super Key(슈퍼키)

슈퍼키는 한 릴레이션 내에 있는 속성들의 집합으로 구성된 키로서, 릴레이션을 구성하는 모든 튜플 중 슈퍼키로 구성된 속성의 집합과 동일한 값을 나타내지 않는다. 슈퍼키는 유일성을 만족하지만, 최소성은 만족시키지 못할 수 있다.

EX)

[학생] 릴레이션에서는 학번, 주민번호, 학번+주민번호, 학번+주민번호+성명 등으로 슈퍼키를 구성할 수 있다. 최소성을 만족시키지 못한다는 말은 학번+주민번호+성명이 슈퍼키인 경우, 3개의 속성 조합을 통해 다른 튜플과 구별이 가능하지만, 성명 단독적으로 슈퍼키를 사용했을 때는 구별이 가능하지 않기 때문에 최소성을 만족시키지 못한다는 뜻이다.

Foreign Key(외래키)

외래키는 관계(Relation)를 맺고 있는 릴레이션 R1, R2에서 릴레이션 R1이 참조하고 있는 릴레이션 R2의 기본키와 같은 R1 릴레이션의 속성을 말한다. 외래키는 참조되는 릴레이션의 기본키와 대응되어 릴레이션 간에 참조 관계를 표현하는 데 중요한 도구로 사용된다. 외래키로 지정되면 참조 테이블의 기본키에 없는 값은 입력할 수 없다.

EX)

[수강] 릴레이션이 [학생] 릴레이션을 참조하고 있으므로, [학생] 릴레이션의 학번은 기본키이고, [수강] 릴레이션의 학번은 외래키이다. 즉, [수강] 릴레이션의 학번에는 [학생] 릴레이션의 학번에 없는 값은 입력할 수 없다.

Null 값

Null 값은 데이터베이스에서 아직 알려지지 않았거나 모르는 값으로서, "해당 없음" 등의 이유로 정보 부재를 나타내기 위해 사용하는, 이론적으로 아무것도 없는 특수한 데이터를 뜻한다.

So...

이와 같이 다양한 키의 개념과 그 역할을 이해하는 것은 데이터베이스 설계 및 관리에 있어서 매우 중요하다. 각 키의 역할과 제약 조건을 잘 활용하여 효율적이고 일관성 있는 데이터베이스를 구축할 수 있다. 특히, 키의 유일성과 최소성을 제대로 이해하고 적용하면 데이터 무결성을 유지하는 데 큰 도움이 된다.

profile
개발이란 무엇인가..를 공부하는 거북이의 성장일기 🐢

0개의 댓글