제로베이스 데이터 취업 파트타임/100일 챌린지_일일 학습 일지
제로베이스 데이터 파트타임 스쿨 학습 일지 [25.06.03]
김뚱입니다
2025. 6. 3. 14:02
[강의 요약]
[Part 05. SQL_ Ch 14. PRIMARY KEY, FOREIGN KEY] 강의 수강
챕터 14 클립 전체 수강하였음
🐢 100일 챌린지 🔥 : [▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰░ ] 79/100일 (79%)
79일... 100일이 보인다.
[실습 환경]
- 실습용 데이터베이스 : zerobase
- 실습 테이블 : police_station, crime_status
[PRIMARY KEY (기본키)]
▶ 기본 개념
- 역할 : 테이블 내 각 레코드를 유일하게 식별
- 특징 : 중복 불가, NULL 불가
- 개수 : 테이블당 하나만 지정 가능
▶ PRIMARY KEY 생성 문법
* CREATE TABLE에서 지정
CREATE TABLE tablename (
column_name datatype PRIMARY KEY
);
- 단일 칼럼을 기본키로 지정
*여러 칼럼을 묶어서 지정
CREATE TABLE tablename (
col1 datatype,
col2 datatype,
PRIMARY KEY (col1, col2)
);
▶ PRIMARY KEY 삭제 문법
ALTER TABLE tablename
DROP PRIMARY KEY;
- 복합키든 단일키든 동일하게 사용
[FOREIGN KEY (외래키)]
▶ 기본 개념
- 역할 : 다른 테이블의 기본키와 연결하여 참조 무결성 유지
- 제약 : 참조 대상은 반드시 기본키 or 유일한 값
▶ FOREIGN KEY 생성 문법
*CREATE TABLE에서 바로 지정
CREATE TABLE tablename (
col datatype,
FOREIGN KEY (col) REFERENCES referenced_table(referenced_col)
);
- CONSTRAINT 생략 가능
*ALTER TABLE로 나중에 지정
ALTER TABLE tablename
ADD FOREIGN KEY (col) REFERENCES referenced_table(referenced_col);
▶ FOREIGN KEY 삭제 문법
* 제약조건 이름 확인 (MySQL 기준)
SELECT CONSTRAINT_NAME
FROM information_schema.KEY_COLUMN_USAGE
WHERE TABLE_NAME = 'tablename';
*삭제
ALTER TABLE tablename
DROP FOREIGN KEY constraint_name;
[실전 예제: police_station & crime_status]
▶ 목적
police_station.name ↔ crime_status.police_station을 연결
▶ 문제: 두 테이블의 경찰서 이름 형식이 다름
- police_station.name: ex) '서울중부경찰서'
- crime_status.police_station: ex) '중부'
문자열 처리로 일치시키기 필요함
▶ PRIMARY KEY 지정
ALTER TABLE police_station
ADD PRIMARY KEY (name);
- 경찰서 이름을 고유하게 식별
▶ FOREIGN KEY 추가 전 전처리
- crime_status 테이블에 새로운 컬럼 police_station_name 추가
- 값을 정제하여 police_station.name과 일치하게 업데이트
ALTER TABLE crime_status
ADD COLUMN police_station_name VARCHAR(255);
UPDATE crime_status
SET police_station_name = CONCAT('서울', police_station, '경찰서');
▶ FOREIGN KEY 지정
ALTER TABLE crime_status
ADD FOREIGN KEY (police_station_name)
REFERENCES police_station(name);
[FOREIGN KEY와 JOIN 활용]
외래키 설정이 완료되면 두 테이블을 쉽게 JOIN 가능함
SELECT *
FROM police_station ps
JOIN crime_status cs
ON ps.name = cs.police_station_name;
- 데이터의 연결성과 의미 해석이 수월해짐
[요약 정리]
항목 | 문법 | 설명 |
기본키 생성 | PRIMARY KEY (col) | 유일하고 NULL 안 됨 |
기본키 삭제 | ALTER TABLE DROP PRIMARY KEY | 기본키 제거 |
외래키 생성 | FOREIGN KEY (...) REFERENCES ... | 참조 관계 설정 |
외래키 삭제 | ALTER TABLE DROP FOREIGN KEY ... | 제약조건 이름 필요 |
외래키 조회 | information_schema.KEY_COLUMN_USAGE | 제약조건 정보 확인 |
실습 핵심 | police_station ↔ crime_status 연결 | JOIN 사용 가능 |
[나의 생각 정리]
PRIMARY KEY는 테이블 내 데이터 무결성을 위한 핵심이다.
FOREIGN KEY는 테이블 간 연결성을 강화하여 복잡한 관계형 데이터베이스 구현 가능하다.
FOREIGN KEY와 JOIN을 함께 사용하면 데이터 분석에 유용하다.
실제 분석 실무에서도 테이블 간 구조 설계 시 매우 자주 사용된다.
[적용점]
위에 생각 정리에 작성한 대로 적용하면 좋을 것 같다.
“이 글은 제로베이스 데이터 스쿨 주 3일반 강의 자료 일부를 발췌하여 작성되었습니다.”