DB
DB(Database)
데이터의 집합을 데이터베이스라고 한다.
데이터를 구조화하여 관리하기 때문에 데이터 중복을 막을 수 있고, 효율적이고 빠른 데이터 연산을 가능하게 한다.
DBMS(Database Management System)
데이터베이스를 생성, 저장, 관리할 수 있는 기능들을 제공하는 시스템(프로그램)이다.
RDBMS(Reletional DBMS)
데이터 간에 관계를 가지고 있는 DBMS이다. 데이터 간에 관계를 맺고 있기 때문에 찾고 싶은 데이터가 내가 지금 보고 있는 곳에 없더라도 거기에 있는 힌트를 사용해서 원하는 것을 찾아낼 수 있다.
데이터 중복·불일치를 최소화할 수 있고, 데이터의 보안, 데이터의 일관성·무결성 유지의 장점이 있다.
DBMS vs RDBMS
DBMS | RDBMS | |
저장 형식 | 파일(계층적, 탐색 형식) | 테이블(PK 식별자 사용) |
정규화 여부 | X | O |
데이터 보안 | X | O |
적합한 데이터 처리 양 | 작음 | 큼 |
예시 | 파일시스템, XML | MySQL, Oracle |
테이블
게시판 테이블을 만들어보자.
속성, 필드, 튜플, 레코드는 관계형 데이터베이스에서 사용하는 용어이다.
기본키(Primary Key, PK)
위에서 만든 테이블의 기본키를 정해보자.
기본키(Primary Key)는 테이블의 각 행을 유니크하게 구별할 수 있는 key 값을 말한다.
게시글 번호를 제외한 모든 컬럼은 중복될 가능성이 있어서 기본키가 될 수 없다. 따라서 작성된 게시글 순서대로 번호를 부여하는 게시글 번호 칼럼이 기본키이다.
정규화
정규화는 정해진 규칙에 따라 테이블을 분리하는 과정을 말한다.
위의 테이블에서 '호박고구마' 작성자가 직업을 수정했다고 해보자. 그러면 우리가 직접 1행과 2행의 직업 컬럼을 수정해줘야 한다. 지금은 2행만 바꿔주면 되지만 작성자가 많은 글을 작성했을 수도 있다. 이런 경우 일일이 바꿔주는 게 힘들기 때문에 테이블을 분리한다.
외래키(Foreign Key, FK)
게시글 테이블에서 '감자'라는 작성자의 글을 보고 '감자'라는 사용자의 직업을 찾아보려고 한다.
사용자 테이블에 '감자'라는 작성자가 두 명이라서 어떤 사람이 그 글을 썼는지 알 수 없다. 따라서 사용자 테이블도 PK를 설정해주어야 하고, 게시글 테이블의 작성자 컬럼도 변경해야 한다.
사용자 테이블의 기본키를 작성자 ID로 설정했다. 이제는 게시글 테이블에서 작성자 ID를 참고하여 사용자 테이블에 있는 해당 작성자의 직업을 알 수 있을 것이다.
이렇게 A 테이블에서 B 테이블의 데이터를 찾아가고 싶을 때 사용하는 Key를 외래키라고 하며, 이 예시에서는 작성자ID가 외래키에 해당한다. B 테이블의 기본키를 A 테이블의 외래키로 사용하는 것이 이상적이다.
관계
데이터베이스 연관 관계에는 1:1, 1:N, M:N이 있다.
위에서 작성했던 테이블의 관계를 생각해보자.
사용자 1명이 게시글을 여러 개 작성할 수 있고, 게시글 1개는 1명의 사용자만 가질 수 있다. 전자는 1:N이고, 후자는 1:1이다. 하지만 후자의 말을 다르게 표현하면 사용자 1명은 하나의 게시글만 작성할 수 있다는 뜻이 되므로 현실적으로 이 테이블 사이의 관계는 1:N이다.
이번에는 어떤 테이블이 연관 관계의 주인인지 확인해 보자.
게시글 테이블을 보고 사용자 데이터는 확인할 수 있지만 사용자 테이블을 보고 게시글 데이터를 확인하는 것은 불가능하다. 따라서 이 연관 관계의 주인은 게시글 테이블이고, FK를 가지고 있는 테이블이 연관 관계의 주인이라고 할 수 있다.
유튜브 실습
지난 시간까지 유튜브 실습했던 것에서 Map에 저장했던 데이터를 테이블로 만들어보자.
채널명은 중복될 수 있으므로 채널 번호를 PK로 하고, 회원 ID는 중복이 허용되지 않으므로 회원 ID를 PK로 설정한다.
사용자 테이블의 PK인 회원 ID를 채널 테이블의 FK로 설정하여 채널 테이블에서 사용자 테이블의 데이터를 찾아갈 수 있도록 한다.
채널 1개의 주인은 사용자 1명이고, 사용자 1명은 여러 개의 채널을 소유할 수 있으므로 1:N 관계이며 관계의 주인은 FK를 가지고 있는 채널 테이블이다.
'데브코스' 카테고리의 다른 글
[5주차 - DAY4] DB 테이블 생성 (0) | 2024.03.28 |
---|---|
[풀 사이클 개발 데브코스 회고] 3월 회고 (0) | 2024.03.28 |
[5주차 - DAY2] REST API 개발 실습(2) (1) | 2024.03.26 |
[5주차 - DAY1] REST API 개발 실습(1) (0) | 2024.03.25 |
[4주차 - DAY5] Node.js 및 Express.js를 사용한 서버 개발 실습(3) (1) | 2024.03.22 |