DB - Key 정리

itonse·2024년 6월 3일
0

CS 스터디

목록 보기
46/56

해당 주제 관련 기술면접 질문 미리보기

Q1. 데이터베이스에서 키의 역할은 무엇인가요?
Q2. 데이터베이스에서 다양한 키 종류에 대해 설명하세요.
Q3. Primary Key와 Unique Key 차이를 말씀해보세요.


Key 정의

Key는 검색이나 정렬 시 튜플을 구분할 수 있는 기준이 되는 속성(컬럼)을 의미합니다.



Key 종류

1. Candidate Key(후보키)

후보키는 유일성최소성을 만족하는 키입니다. 후보키로 설정할 수 있는 키는 여러 개일 수 있습니다.

  • 유일성: Key로 하나의 튜플을 유일하게 식별할 수 있음
  • 최소성: 꼭 필요한 속성으로만 구성
CREATE TABLE Users (
    id INT NOT NULL,
    email VARCHAR(255) NOT NULL UNIQUE,
    username VARCHAR(100) NOT NULL UNIQUE
);

위 쿼리문에서 후보키는 id, email, username 입니다.

2. Primary Key(기본키)

후보키 중에서 선택한 메인 키로, 유일성최소성을 만족하며 NULL 값을 가질 수 없습니다.

CREATE TABLE Users (
    id INT NOT NULL PRIMARY KEY,
    email VARCHAR(255) NOT NULL UNIQUE,
    username VARCHAR(100) NOT NULL UNIQUE
);

위 쿼리문에서 id는 기본키(PK) 입니다.

3. Alternate Key(대체키)

기본키를 제외한 나머지 후보키를 대체키라고 합니다.

CREATE TABLE Users (
    id INT NOT NULL PRIMARY KEY,
    email VARCHAR(255) NOT NULL UNIQUE,
    username VARCHAR(100) NOT NULL UNIQUE
);

여기서 PK인 id를 제외한 emailusername이 대체키가 됩니다.

4. Super Key(슈퍼키)

기본키나 후보키에 다른 속성을 더한 키키 입니다. 유일성을 만족하지만 최소성을 만족하지 못할 수 있습니다.


다른 Key와의 관계

후보키 = 기본키 + 대체키
기본키 = 후보키 - 대체키
슈퍼키 > 후보키 > 대체키 > 기본키


CREATE TABLE Users (
    id INT NOT NULL PRIMARY KEY,
    email VARCHAR(255) NOT NULL UNIQUE,
    username VARCHAR(100) NOT NULL UNIQUE
);

슈퍼키 집합

  • id (기본키이므로 유일성O, 최소성O)
  • email (유니크 키이므로 유일성O, 최소성O)
  • username (유니크 키이므로 유일성O, 최소성O)
  • (id, email) (유일성O, 최소성X)
  • (id, username) (유일성O, 최소성X)
  • (email, username) (유일성O, 최소성X)
  • (id, email, username) (유일성O, 최소성X)

5. Foreign Key(외래키)

다른 테이블의 기본키를 참조하는 키입니다.

CREATE TABLE Orders (
    order_id INT NOT NULL PRIMARY KEY,
    user_id INT,
    FOREIGN KEY (user_id) REFERENCES Users(id)
);

위 쿼리문에서 user_id는 외래키 입니다.

6. Unique Key(유니크 키)

모든 레코드에 대해 유일한 값을 가져야 하는 키입니다. 하나의 테이블에 여러 개의 유니크 키를 설정할 수 있습니다.

CREATE TABLE Products (
    product_id INT NOT NULL PRIMARY KEY,
    product_code VARCHAR(100) NOT NULL UNIQUE,
    product_name VARCHAR(255) NOT NULL
);

위 쿼리문에서 유니크 키는 다음과 같습니다.
product_id (기본키이므로 유일성을 가짐)
product_code (명시적으로 UNIQUE 제약 조건이 있음)

7. Composite Key(복합키)

두 개 이상의 필드를 결합하여 테이블 내에서 레코드를 유일하게 식별할 수 있는 키입니다.

예시로 아래 쿼리문에서는 학생의 수강 기록을 관리하는 테이블에서 학생 ID와 과목 ID를 결합하여 유일한 수강 기록을 나타낼 수 있습니다.

CREATE TABLE Enrollment (
    student_id INT NOT NULL,
    course_id INT NOT NULL,
    enrollment_date DATE NOT NULL,
    PRIMARY KEY (student_id, course_id)
);

쿼리문에서 student_idcourse_id가 결합되어 복합키가 됩니다. 이는 각 학생이 각 과목에 대해 유일하게 수강 기록을 가질 수 있도록 보장합니다.



면접에서의 설명 방법

면접 답변을 구성할 때는 개념을 설명하는 것뿐만 아니라, 구체적인 SQL 문장으로 예시를 들어주면 데이터베이스 설계의 포괄인 이해를 보여주어 역량을 더욱 잘 드러낼 수 있다고 합니다.

CREATE TABLE ExampleTable (
    -- Candidate Key 1 / Primary Key
    id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    
    -- Candidate Key 2 / Alternate Key 1
    email VARCHAR(255) NOT NULL UNIQUE,
    
    -- Candidate Key 3 / Alternate Key 2
    username VARCHAR(100) NOT NULL UNIQUE,

    first_name VARCHAR(50) NOT NULL,
    last_name VARCHAR(50) NOT NULL,
    
    -- Foreign Key
    department_id INT,

    -- Composite Key
    UNIQUE (first_name, last_name),

    FOREIGN KEY (department_id) REFERENCES Departments(id),

    -- Super Key
    UNIQUE (id, email)
);

CREATE TABLE Departments (
    id INT NOT NULL AUTO_INCREMENT,
    department_name VARCHAR(100) NOT NULL,
    PRIMARY KEY (id)
);

id, email, username은 모두 후보키 입니다.
여기서 id는 기본키이며, email과 username은 대체키가 되며, 동시에 유니크 키이기도 합니다.
department_id는 다른 테이블인 Departments의 기본키를 참조하는 외래키입니다.
first_name와 last_name을 합쳐 복합키를 구성하는데, 이는 first_name과 last_name의 조합이 유일해야 한다는 것을 의미합니다.
id와 email의 조합으로 슈퍼키를 만들 수 있습니다.슈퍼키는 유일성을 가지지만 최소성을 만족하지 않는 키입니다.



Key 관련 면접 질문들 정리

Q1. 데이터베이스에서 키의 역할은 무엇인가요?

데이터베이스에서 키는 각 레코드를 유일하게 식별할 수 있는 속성을 의미합니다. 키를 사용함으로써 테이블 내에서 중복된 데이터를 방지하고, 데이터 무결성을 유지할 수 있습니다. 예를 들어, 기본키(Primary Key)는 각 레코드를 고유하게 식별하며, 외래키(Foreign Key)는 다른 테이블과의 관계를 정의하는 데 사용됩니다.


Q2. 데이터베이스에서 다양한 키 종류에 대해 설명하세요.

Primary Key(기본키): 각 레코드를 유일하게 식별하는 키입니다. NULL 값을 가질 수 없고, 중복될 수 없습니다.
Candidate Key(후보키): 기본키로 사용할 수 있는 속성들의 집합입니다. 유일성과 최소성을 만족합니다.
Alternate Key(대체키): 후보키 중 기본키로 선택되지 않은 나머지 키입니다.
Super Key(슈퍼키): 유일성을 만족하지만 최소성을 만족하지 않는 키로, 기본키나 후보키에 다른 속성을 더한 키입니다.
Foreign Key(외래키): 다른 테이블의 기본키를 참조하여 테이블 간의 관계를 정의하는 키입니다.
Unique Key(유니크 키): 각 레코드에 대해 유일한 값을 가지도록 하는 키입니다. NULL 값을 가질 수 있습니다.
Composite Key(복합키): 두 개 이상의 속성을 결합하여 유일성을 만족시키는 키입니다.


Q3. Primary Key와 Unique Key 차이를 말씀해보세요.

Primary Key와 Unique Key는 모두 유일성을 보장하지만, 몇 가지 차이가 있습니다

Primary Key

테이블당 하나만 존재할 수 있습니다.
NULL 값을 가질 수 없습니다.

Unique Key

테이블당 여러 개 설정할 수 있습니다.
NULL 값을 가질 수 있습니다.

(+추가)
두 키 모두 인덱스를 생성하여 검색 성능을 향상시킵니다. Primary Key는 기본적으로 클러스터드 인덱스를 생성하지만, Unique Key는 넌클러스터드 인덱스를 생성합니다.



ref.
https://github.com/gyoogle/tech-interview-for-developer
https://gr-st-dev.tistory.com/2816

0개의 댓글