해당 주제 관련 기술면접 질문 미리보기
Q1. 데이터베이스에서 키의 역할은 무엇인가요?
Q2. 데이터베이스에서 다양한 키 종류에 대해 설명하세요.
Q3. Primary Key와 Unique Key 차이를 말씀해보세요.
Key는 검색이나 정렬 시 튜플을 구분할 수 있는 기준이 되는 속성(컬럼)을 의미합니다.
후보키는 유일성
과 최소성
을 만족하는 키입니다. 후보키로 설정할 수 있는 키는 여러 개일 수 있습니다.
CREATE TABLE Users (
id INT NOT NULL,
email VARCHAR(255) NOT NULL UNIQUE,
username VARCHAR(100) NOT NULL UNIQUE
);
위 쿼리문에서 후보키는 id
, email
, username
입니다.
후보키 중에서 선택한 메인 키로, 유일성
과 최소성
을 만족하며 NULL 값을 가질 수 없습니다.
CREATE TABLE Users (
id INT NOT NULL PRIMARY KEY,
email VARCHAR(255) NOT NULL UNIQUE,
username VARCHAR(100) NOT NULL UNIQUE
);
위 쿼리문에서 id
는 기본키(PK) 입니다.
기본키를 제외한 나머지 후보키를 대체키라고 합니다.
CREATE TABLE Users (
id INT NOT NULL PRIMARY KEY,
email VARCHAR(255) NOT NULL UNIQUE,
username VARCHAR(100) NOT NULL UNIQUE
);
여기서 PK인 id
를 제외한 email
과 username
이 대체키가 됩니다.
기본키나 후보키에 다른 속성을 더한 키키 입니다. 유일성
을 만족하지만 최소성
을 만족하지 못할 수 있습니다.
다른 Key와의 관계
후보키 = 기본키 + 대체키
기본키 = 후보키 - 대체키
슈퍼키 > 후보키 > 대체키 > 기본키
CREATE TABLE Users (
id INT NOT NULL PRIMARY KEY,
email VARCHAR(255) NOT NULL UNIQUE,
username VARCHAR(100) NOT NULL UNIQUE
);
다른 테이블의 기본키를 참조하는 키입니다.
CREATE TABLE Orders (
order_id INT NOT NULL PRIMARY KEY,
user_id INT,
FOREIGN KEY (user_id) REFERENCES Users(id)
);
위 쿼리문에서 user_id
는 외래키 입니다.
모든 레코드에 대해 유일한 값을 가져야 하는 키입니다. 하나의 테이블에 여러 개의 유니크 키를 설정할 수 있습니다.
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 제약 조건이 있음)
두 개 이상의 필드를 결합하여 테이블 내에서 레코드를 유일하게 식별할 수 있는 키입니다.
예시로 아래 쿼리문에서는 학생의 수강 기록을 관리하는 테이블에서 학생 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_id
와 course_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의 조합으로 슈퍼키를 만들 수 있습니다.슈퍼키는 유일성을 가지지만 최소성을 만족하지 않는 키입니다.
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는 모두 유일성을 보장하지만, 몇 가지 차이가 있습니다
테이블당 하나만 존재할 수 있습니다.
NULL 값을 가질 수 없습니다.
테이블당 여러 개 설정할 수 있습니다.
NULL 값을 가질 수 있습니다.
(+추가)
두 키 모두 인덱스를 생성하여 검색 성능을 향상시킵니다. Primary Key는 기본적으로 클러스터드 인덱스를 생성하지만, Unique Key는 넌클러스터드 인덱스를 생성합니다.
ref.
https://github.com/gyoogle/tech-interview-for-developer
https://gr-st-dev.tistory.com/2816