일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- JPA
- 데이터베이스설계요약
- db설계과정
- 데이터베이스네이밍규칙
- 리콰이어먼츠 설정
- jpa플러시
- Python
- 프라이머리키
- 스파르타코딩
- 스파르타코딩클럽
- 포링키
- db네이밍규칙
- 장고기초지식
- dbnamingrule
- 자기계발회고
- 준태튜터님
- 스파코
- 릴레이션십데이터베이스
- 팀스파르타
- 코딩
- 패스트캠퍼스
- django
- 파이썬
- 내일배움캠프
- spring필수문법
- jakartapersistenceapi
- db설계핵심요약
- 장고
- db설계방법
- tableperclass
- Today
- Total
당우 일기장
RDBMS의 PK와 FK (기본키와 외래키) 본문
PK(Primary Key)기본키 란?
실생활 예시) 세상에는 수많은 사람들이 살아간다 얼굴이 닮은사람도있고 이름이 같은사람도 있다
하지만 우리는 사람들을 일일이 구별할 수 있어야한다. 그래서 주민등록번호를 사람마다 부여해서 사람들을 구별한다.
데이터베이스의 테이블에도 수많은 데이터가 저장되어있다. 사람들을 구별하기위해 주민번호가 있듯이
수많은 데이터들을 구별하기위해 PK(Primary Key) 즉 기본키 라는걸 사용한다
PK는 특정 데이터를 식별하기 위한 값 이다 PK는 중복되서는 안 되며, 비어있어서도 안 된다.
현업에서는 PK를 어떻게 설정할까?
주민등록번호나 이메일이 특정 데이터를 식별할수 있는 데이터라고 생각해서 pk로 설정 할 수있겠지만이건 부적절하다. 가능성은 적겠지만 주민등록번호나 이메일은 바뀔 가능성이 존재한다. PK가 바뀌게 되면 특정 데이터를 식별하던 값이 바뀌어서 데이터를 관리하거나 사용하는 입장에서 혼란이 올 수 있다.뿐만 아니라 RDBMS의 성능에도 안 좋은 영향을 미친다
따라서 현업에서는 PK를 주로 Auto Increment(숫자가 1씩 증가하는방식) 이나 UUID(랜덤값)으로 설정을 많이 한다.
FK(Foreign Key)외래키 란?
사용자와 게시글 데이터를 저장해아한다고 가정하자.
데이터를 분리해서 저장하기위해 사용자와 게시글 테이블을 만들어서 아래와 같이 저장했다.
그런데 아래와 같이 게시글 데이터를 저장하면 어떤 사용자가 게시글을 저장했는지 알 수 없다.
그래서 게시글 데이터를 저장할 때 사용자 데이터의 PK(기본키)를 같이 저장한다.
게시글 테이블에서 사용자의 PK를 저장하기 위한 값을 보고 FK(Foreign Key, 외래키)라고 이야기한다

FK(Foreign Key, 외래키) : 다른 테이블의 데이터와 관계를 연결하기 위한 키

1번 게시글의 글은 2번 유저가 썻다 2번유저는 누구일까? 했을때 박나래 임을 알 수 있다
이 유저 아이디는 게시글 입장에서 FK(Foreign Key, 외래키) 라고 한다
다시한번 강조하자면
FK(Foreign Key, 외래키) : 다른 테이블의 데이터와 관계를 연결하기 위한 키
라고한다
+ 참조무결성을 쉽게 설명하기
위에 예시를 들어서 게시글에서
3번 게시글을 쓰는데 20번 유저가 썻다고 작성했다.
근데 유저에는 20번 유저가 없다. -> 이때 에러를 일으킨다
왜냐하면 결점이 생기기 때문이다
이걸 데이터베이스의 무결성 이라고한다.
결점이 생기면 안돼기때문이다
이 글은 박재성님의 비전공자도 이해할 수 있는 DB설계 입문/실전 강의를 요약한 내용입니다
'DB' 카테고리의 다른 글
DB설계 전체과정 (0) | 2025.04.07 |
---|---|
DB설계의 핵심은 중복 없애기 이다 (1) | 2025.04.07 |
관계형 데이터베이스의 기본 구성(RDBMS) (0) | 2025.04.07 |
데이터베이스 모델링(Database Modeling)이란? (0) | 2025.04.07 |