SQL의 여러 종류의 키(Key)

SQL에서는 여러 종류의 (key)가 존재해요.

이들은 DB 내에서 데이터를 식별하고, 관계를 정의하고, 무결성을 유지하는 데 중요한 역할을 합니다.

키를 설정해야 관계형 DB의 구조데이터 무결성보장할 수 있어요.

지금부터 어떤 종류의 key가 있는 지 알아봅시다!.

 


1. Primary Key(기본 키)

Primary Key는 DB에서 각 레코드를 고유하게 식별하는 데 사용됩니다.

1-1. 고유성

Primary Key로 지정된 열의 값은 DB 테이블 내에서 고유성을 가져야 합니다.

즉, 같은 값이 두 번 나타날 수 없어요.

1-2. NULL 불가

또한, NULL 값을 가질 수 없어요.

모든 레코드는 반드시 Primary Key 값을 가져야 합니다.

1-3. 불변성

Primary Key의 값은 변경되지 않아야 합니다.

일반적으로 ID 같은 인위적인 식별자를 사용하는 것이 좋습니다.

1-4. index

Primary Key자동으로 index가 생성됩니다.

1-5. 사용 방법

사용 방법은 다음과 같습니다.

CREATE TABLE Students (
    Student ID INT PRIMARY KEY,
    Name VARCHAR(10),
    Age INT
);

 


2. Foreign Key(외래 키)

Foreign KeyDB에서 두 테이블 간의 관계를 설정하는 데 사용됩니다.

또한, 한 테이블의 열다른 테이블의 Primary Key (기본 키)를 참조하도록 하여, 데이터 간의 관계를 정의합니다.

2-1. 참조 무결성

Foreign Key참조하는 테이블의 기본 키 값이 존재해야 합니다.

이를 통해 데이터의 일관성을 유지할 수 있어요.

2-2. 다중 값 가능

Foreign Key동일한 값을 여러 번 가질 수 있으며, 이는 한 테이블의 여러 레코드가 다른 테이블의 단일 레코드를 참조할 수 있음을 의미합니다.

2-3. NULL 값 허용

Foreign KeyNULL 값을 가질 수 있습니다.

이는 특정 레코드가 다른 테이블의 레코드를 참조하지 않을 수 있음을 나타내요.

2-4. 관계 설정

Foreign Key를 통해 두 테이블 간1:1, 1:N, M:N 관계를 정의할 수 있습니다.

2-5. 사용 방법

사용 방법은 다음과 같습니다.

CREATE TABLE Classes (
    ClassID INT PRIMARY KEY,
    ClassName VARCHAR(100)
);

CREATE TABLE Students (
    StudentID INT PRIMARY KEY,
    Name VARCHAR(100),
    Age INT,
    ClassID INT,
    FOREIGN KEY (ClassID) REFERENCES Classes(ClassID)
);

방금 코드와 같이 Students 테이블과 Classes테이블이 있을 때, 각 학생이 수강하는 수업을 나타내기 위해 Classes 테이블의 ClassIDStudents 테이블의 Foreign Key로 설정할 수 있습니다.

 


3. Unique Key(고유 키)

Unique KeyDB 테이블에서 특정 열의 값이 고유해야 함을 보장하는 제약 조건입니다.

3-1. 고유성

Unique Key지정된 열의 값을 테이블 내에서 유일해야 해요.

즉, 같은 값이 두 번 나타날 수 없습니다.

3-2. NULL 값 허용

Unique KeyNULL 값을 가질 수 있습니다.

하지만, NULL을 포함한 경우에도 고유성을 유지합니다.

즉, 같은 행에는 NULL 값이 하나만 들어갈 수 있다는 뜻이죠.

3-3. 다수 설정 가능

하나의 테이블에 여러 개의 Unique Key를 설정할 수 있습니다.

Unique Key서로 다른 열 or 열 조합으로 지정할 수 있어요.

3-4. index 생성

Unique Key를 설정하면, 자동으로 inedx가 생성됩니다.

3-5. 사용 방법

사용 방법은 다음과 같습니다.

CREATE TABLE Users (
    UserID INT PRIMARY KEY,
    Username VARCHAR(50) UNIQUE,
    Email VARCHAR(100) UNIQUE,
    Password VARCHAR(100)
);

방금 전 코드와 같이 이메일유저명UNIQUE를 주어, 유일한 값을 줄 수 있도록 설정하였습니다.

 


4. Composite Key(복합 키)

Composite Key두 개 이상의 열(column)을 결합하여, 고유한 식별자를 생성하는 키입니다.

이러한 키는 DB 테이블에서 각 행(row)을 고유하게 식별하는 데, 사용됩니다.

4-1. 고유성 보장

단일 열로는 고유성을 보장할 수 없는 경우, 여러 열을 결합하여 고유성을 유지할 수 있습니다.

4-2. M:N 관계

두 개 이상의 데이블 간 M:N(다대다) 관계를 나타내기 위해 중간 테이블을 만들 때, Composite Key를 사용할 수 있습니다.

4-3. 사용 방법

사용 방법은 다음과 같습니다.

CREATE TABLE Enrollment (
    student_id INT,
    course_id INT,
    PRIMARY KEY (student_id, course_id)
);

위 쿼리에서 PRIMARY KEY (student_id, course_id) 부분이 Composite Key를 정의하고 있습니다.

student_idcourse_id의 조합이 테이블의 각 행을 고유하게 식별합니다.

 


5. Candidate Key(후보 키)

Candidate KeyDB 테이블에서 각 행을 고유하게 식별할 수 있는 or 열의 조합을 의미합니다.

이는 Primary Key(기본 키)가 될 수 있는 모든 열의 집합으로, 기본 키는 후보 키 중에서 선택된 것입니다.

5-1. 고유성

Candidate Key테이블 내에서 각 행을 고유하게 식별해야 합니다.

5-2. 최소성

Candidate Key고유성을 유지하는 데 필요한 최소한의 열로 구성되어야 합니다.

즉, 키의 어떤 부분을 제거해도 여전히 고유성을 유지해야 해요.

5-3. NOT NULL

Candidate Key NULL 값을 가질 수 없습니다.

모든 값은 고유해야 하며, NULL고유성 조건을 충족하지 않기 때문입니다.

 

사용 방법은 다음과 같습니다.

CREATE TABLE Students (
    student_id INT,
    email VARCHAR(255),
    name VARCHAR(100),
    PRIMARY KEY (student_id)
);

이 테이블에서 student_idPrimary Key로 설정되어 있습니다.

하지만, email 또한, 고유하게 식별할 수 있는 정보입니다.

즉, 이 테이블에서는 student_idemail 모두 각각의 학생을 고유하게 식별할 수 있는 열이므로, 둘 다 Candidaate Key가 되는 것이지요.

student_id는 그냥 Candidate Key 중에서 선택된 것 입니다.

 


6. Alternate Key(대체 )

Alternate KeyDB에서 특정 레코드를 고유하게 식별할 수 있는 대안적인 속성 or 속성의 집합을 의미합니다.

Primary Key와 달리, 특정 테이블 내에서 레코드를 유일하게 식별하는 데 사용될 수 있지만, Primary Key설정되지 않은 속성을 포함합니다.

6-1. 유일성

Alternate Key해당 테이블 내에서 모든 레코드를 고유하게 식별해야 합니다.

6-2. NOT NULL

Alternate KayNULL 값을 가질 수 없습니다.

6-3. 복수 존재 가능

하나의 테이블여러 개의 Alternate Key가 존재할 수 있습니다.

 

사용 방법은 다음과 같습니다.

CREATE TABLE Students {
    student_id INT PRIMARY KEY,
    email VARCHAR(255) UNIQUE,
    name VARCHAR(100)
);

Alternate Key를 정의할 떄는 UNIQUE 제약 조건을 사용합니다.

EmailUnique를 줘서, 유일성을 유지시켜 줍니다.

이렇게 하면, 중복 데이터를 방지하고 DB의 신뢰성을 높일 수 있어요.

 


7. Super Key(슈퍼 키)

Super KeyDB에서 관계형 DB테이블에서 각 행(row)을 고유하게 식별할 수 있는 속성 or 속성 집합의 조합을 의미합니다.

7-1. 유일성

Super Key테이블 내의 모든 레코드를 구분할 수 있어야 합니다.

7-2. 복수 가능성

하나의 테이블에는 여러 개의 Super Key가 존재할 수 있습니다.

예를 들어, 학생 테이블에서 학생 ID, Email, 전화번호 등은 모두 Super Key가 될 수 있어요.

7-3. 최소성

Super Key하위 집합이 유일성을 유지하지 않으면, 그것은 Super Key가 아닙니다.

즉, 더 작은 조합으로도 유일성을 유지할 수 있어야 해요.

7-4. 예시

Super Key는 개념이 복잡하기에 예시를 들어보겠습니다.

예를 들어, 학생 테이블이 다음과 같이 있다고 가정해 볼께요.

학생 ID 이름 이메일
12345 김철수 chulsoo@student.com
67890 박영희 younghee@student.com

 

이 경우, 다음과 같은 Super Key가 존재할 수 있어요.

  • {학생 ID}
  • {이메일}
  • {학생 ID, 이름}
  • {이름, 이메일}

그러나 {학생 ID} 최소 Super Key로, 이 경우 Candidate Key(후보키)로도 간주됩니다.

 


8.정리하며

지금까지 여러 종류의 에 대해 알아보았습니다.

이를 활용하여 관계형 DB의 구조데이터 무결성을 보장할 수 있을 것 같아요.

 

참고

보딩코 님의 SQL | MySQL | 기본키, 고유키, 외래키

쩨리쩨리 님의 [SQL] 키(슈퍼키,대체키,후보키,기본키,외래키)

Hoyeon 님의 [Database] 키(Key) 개념과 종류

'Back-End Study > DBMS' 카테고리의 다른 글

MySQL vs PostgreSQL  (0) 2024.10.30
PostgreSQL  (4) 2024.10.25
사용자 계정 생성 및 삭제  (2) 2023.11.20
AQueryTool  (0) 2022.09.08
JDBC - 11. 회원가입 만들기  (0) 2022.09.08