Primary Key와 Foreign Key의 차이와 각각의 역할
⭐️ Primary Key와 Foreign Key의 차이 및 역할
데이터베이스 구축 시 각 데이터 테이블을 잘 관리하기 위해 하나의 고유한 데이터를 지정하고,
이에 파생되는 다른 데이터를 관리할줄 알아야하는데, 여기서 나오는 Primary Key와 Foreign Key에 대해서 알아보겠다.
🔥 Primary Key (기본 키)
테이블의 각 행(row)을 유일하게 식별하기 위해 설정하는 컬럼이다.
중복될 수 없고, NULL(빈값)이 될 수 없다.
🍀 특징
1. 고유성 : 모든 레코드(행)는 고유한 Primary Key를 가져야 한다. -> 중복 x
2. NOT NULL : Primary Key 컬럼은 NULL을 허용하지 않는다.
3. 기본 정렬기준 : 일부 DBMS에서 Primary Key를 기준으로 정렬 하기도 함
4. 일반적으로 숫자 사용 : 인덱싱 및 검색 속도를 위해 정수형 컬럼을 주로 사용한다.
[ Primary Key 예제 ]
CREATE TABLE Student (
student_id INT PRIMARY KEY,
name VARCHAR(50),
age INT
);
Primary key는 테이블 생성시에 위 코드와 같이 컬럼레벨 (컬럼 옆에 작성),
테이블레벨 ( 컬럼 맨 아래 작성 - 현재 코드로 보면 age INT 아래 작성), ALTER로 수정할때 Primary Key를 줄 수 있다.
Primary key를 주면 Student_id 컬럼은 모든 학생을 고유하게 구분하는 값이 된다.
🔥 Foreign Key (외래 키)
외래키란 다른 테이블의 Primary key를 참조하는 컬럼이다.
테이블 간 관계를 설정할때 사용되며, 참조 무결성을 유지하기 위해 필수적이다.
* 참조 무결성 : 관계형 데이터베이스에서 두 테이블 간의 참조 관계가 올바르게 유지되도록 보장하는 데이터
무결성 규칙.
🍀 특징
1. 참조관계 설정 : 한 테이블의 컬럼이 다른 테이블의 Primary key를 참조
2. NULL 허용 가능 : Foreign key 컬럼은 NULL일 수 있다. -> 관계가 없을 수도 있으니까.
3. 중복 허용 : 여러 행이 같은 Foreign key 값을 가질 수 있다.
4. 삭제 / 수정 규칙 가능 : 부모 테이블의 값 변경시 연쇄 반응 설정 가능. CASCADE 등이 있다.
[ Foreign key 예제 ]
CREATE TABLE Enrollment (
enrollment_id INT PRIMARY KEY,
student_id INT,
course_id INT,
FOREIGN KEY (student_id) REFERENCES Student(student_id)
);
Foreign key는 테이블 레벨 방식으로 작성하는 것을 추천 -> 가독성을 위해
FOREIGIN KEY (현재 테이블에서 참조받을 컬럼) REFERENCES 참조 테이블(참조할 컬럼)으로 작성
Enrollment 테이블의 student_id는 Student 테이블의 student_id를 참조한다.
이렇게 Foreign key를 설정하게 되면 테이블 간 관계가 형성된 것이다.
[ Primary Key Vs Foreign Key ]
구분 | Primary Key | Foreign Key |
역할 | 행(Row)을 고유하게 식별 | 다른 테이블의 행을 참조 |
중복 허용 | 불가 | 허용 |
NULL 허용 | 불가 | 허용 |
데이터 소유 | 자신의 테이블 데이터 | 다른 테이블 Primary Key 참조 |
제약 조건 | 고유성 + NOT NULL | 참조 무결성 유지 |
사용목적 | 데이터의 유일성 보장 | 테이블 간 관계 형성 |