728x90
반응형
테이블의 **Primary Key (PK)**는 테이블의 각 행(레코드)을 고유하게 식별하기 위해 사용되는 컬럼(또는 컬럼들의 조합)입니다.
PK가 1개인 테이블과 2개 이상의 컬럼을 조합하여 PK를 구성하는 테이블의 주요 차이점은 다음과 같습니다.
1. PK가 1개인 테이블
- 구조: 테이블에서 단일 컬럼이 Primary Key로 사용됩니다.
- 특징:
- 한 개의 컬럼만으로 각 행을 고유하게 식별할 수 있습니다.
- 단순한 데이터 구조에서 주로 사용됩니다.
- 단일 PK 컬럼은 일반적으로 고유 ID, 사용자 번호, 주문 번호 등의 역할을 합니다.
예제
CREATE TABLE Users ( user_id INT PRIMARY KEY, name VARCHAR(50), email VARCHAR(100) );
- 설명: user_id는 각 사용자를 고유하게 식별하는 PK입니다.
장점
- 단순한 관리 및 설계.
- 색인(Index)과 검색 성능이 효율적.
- 직관적으로 고유 식별자를 이해하기 쉬움.
단점
- 복합적인 식별 요건이 있을 경우 단일 PK로는 충분하지 않을 수 있음.
2. PK가 2개 이상인 테이블 (복합 PK)
- 구조: 두 개 이상의 컬럼을 조합하여 하나의 Primary Key를 만듭니다.
- 특징:
- 단일 컬럼만으로는 각 행을 고유하게 식별할 수 없는 경우 사용됩니다.
- 두 개 이상의 컬럼 조합이 고유해야 함.
- 주로 관계형 테이블(예: 다대다 관계를 표현하는 조인 테이블)에서 사용됩니다.
예제
CREATE TABLE Orders ( order_id INT, product_id INT, quantity INT, PRIMARY KEY (order_id, product_id) );
- 설명:
- order_id와 product_id의 조합이 고유해야 합니다.
- 단일 컬럼(order_id 또는 product_id)만으로는 행을 고유하게 식별할 수 없습니다.
장점
- 여러 속성을 조합해 고유성을 보장할 수 있음.
- 다대다 관계를 표현하거나 데이터 무결성을 유지하기에 적합.
- 추가 컬럼으로 식별의 세밀함을 높일 수 있음.
단점
- PK의 크기가 커지므로 색인과 검색 성능이 단일 PK보다 낮아질 수 있음.
- 관리와 설계가 복잡해질 가능성.
- 외래 키로 사용할 때 복합 키를 참조해야 하므로 추가적인 복잡성 증가.
주요 차이점 비교
특징 | 단일 PK | 복합 PK |
구조 | 하나의 컬럼 | 두 개 이상의 컬럼 조합 |
유형 | 단순 식별자 | 다중 속성을 조합한 식별자 |
사용 사례 | 사용자를 고유하게 식별하는 테이블 | 관계 테이블(조인 테이블), 복합 식별 요구 |
설계 및 관리 | 단순 | 복잡 |
색인 및 검색 성능 | 효율적 | 상대적으로 덜 효율적 |
외래 키 참조 | 단일 컬럼으로 참조 가능 | 다중 컬럼 참조 필요 |
복합 PK를 사용하는 상황
- 조인 테이블: 다대다 관계를 표현하기 위해 사용됩니다. 예를 들어, 학생과 수업의 관계를 나타내는 경우:
CREATE TABLE StudentClass ( student_id INT, class_id INT, PRIMARY KEY (student_id, class_id) );
- 날짜 기반 식별: 특정 날짜와 시간대 조합으로 고유한 데이터를 저장할 때:
CREATE TABLE RoomBooking ( room_id INT, booking_date DATE, PRIMARY KEY (room_id, booking_date) );
요약
- 단일 PK는 단순한 고유 식별이 가능한 경우 적합하며, 설계와 성능 관리가 용이합니다.
- 복합 PK는 고유 식별을 위해 여러 컬럼의 조합이 필요할 때 사용되며, 다대다 관계 테이블에서 주로 사용됩니다. 하지만 설계와 관리가 더 복잡할 수 있습니다.
728x90
반응형
'IT > DB' 카테고리의 다른 글
mysql workbench 자동 대문자 변환하는 방법 (0) | 2024.11.21 |
---|---|
PK 2개일 경우 인덱스 특징 (0) | 2024.11.21 |
데이터베이스 sql 월별 평균 건수 조회 쿼리 AVG 함수 (0) | 2024.11.17 |
큐브리드 sql replace 공백 구분탭 추가하는 방법 CHAR(9) (1) | 2024.11.14 |
mysql distinct, group by 차이는? (1) | 2024.11.12 |