오늘도 개발
관계형 데이터베이스(Relational Database) 본문
1. 데이터베이스(Database)란?
데이터를 모아둔 것을 데이터베이스라고 한다.
데이터베이스와 데이터베이스 관리 시스템(DBMS, Database Management System)을
통틀어 데이터베이스라고 부르기도 한다.
데이터베이스를 사용하면 데이터를 더 오랜기간 보존하며 체계적으로 관리할 수 있다.
2. 관계형 데이터베이스(RDBMS)란?
관계형 데이터베이스(Relational Database Management System)
데이터를 테이블(표) 형태로 저장하고, 각 테이블을 연결해서 관리하는 데이터베이스
비관계형 데이터베이스(Non-relational Database Management System, NoSQL)
테이블을 사용하지 않는 모든 데이터베이스
3. Table, Column, Row
관계형 데이터베이스는 테이블로 구성되며,
각 테이블은 Row(행)와 Column(열)으로 구성된다.
Column은 테이블의 항목이고 Row는 항목들의 값이다.
아래 테이블에서 Colum은 id, name, salary이고
첫번째 Row는 1, Sue, 1000이다.

각 Row는 저만의 고유 키(Primary Key)를 갖는다.
위 테이블에서 id Column이 Primary Key를 저장하는 Column이다.
테이블의 한 칸에는 데이터가 하나만 들어가야 한다.
4. 테이블의 관계
One to One(일대일)
테이블 A의 row가 테이블 B의 row와 일대일로 연결되는 관계.
한 row는 다른 테이블의 row 하나하고만 연결된다.
예) 한 사람은 한 주민등록번호만 가질 수 있음

여기서 Identification numbers 테이블의 user_id column에는 Users 테이블의 고유 키(Primary Key)가 들어있다.
이 때 user_id 칼럼은 Users 테이블의 id를 참조한다고 한다.
user_id 칼럼에 들어간 id는 외래키(Foreign Key)라고 부른다.

정리하자면 Primary Key는 한 테이블에서 row가 갖는 고유한 번호이고,
Foreign Key는 다른 테이블의 Primary Key를 참조하는 칼럼이 갖는 값이다.
One to Many(일대다)
테이블 A의 row가 테이블 B의 여러 row와 연결되는 관계.
한 row는 다른 테이블의 row 여러 개와 연결될 수 있다.
예) 한 사람은 여러 반려동물을 키울 수 있음, 한 반려동물은 한 사람만 주인으로 가질 수 있음

Many to Many(다대다)
테이블 A의 여러 row가 테이블 B의 여러 row와 연결되는 관계.
예) 한 작가는 여러 책을 쓸 수 있음, 한 책은 여러 작가를 가질 수 있음


author_books 테이블은 Authors와 Books 테이블의 데이터 조합을 담고있다.
이렇게 다대다 관계의 두 테이블을 연결하기 위해서는 중간 테이블(association table)이 필요하다.
5. 관계형 데이터베이스의 장점
관계형 데이터베이스의 장점은 중복 없이 데이터를 저장할 수 있다는 것이다.
앞서 살펴본 Many to many 관계 예시의 세 테이블을 합치면 사실 아래의 테이블과 같다.
Author 칼럼에서는 김코드가 두 번 반복되고, Title 칼럼에서도 각 제목이 여러 번 반복되어 등장한다.

하지만 테이블을 분리하면 작가 정보는 Authors 테이블에서만 한 번씩,
책 정보는 Books 테이블에서만 한 번씩 쓰면 된다.
또한 작가 정보는 Authors 테이블에서만 관리하고 책 정보는 Books 테이블에서만 관리하면 되므로
데이터를 잘못 저장할 가능성도 낮아진다.
관계형 데이터베이스를 설계할 때 데이터 중복이 최대한 일어나지 않게 만드는 것을
정규화(Normalization)라고 한다.
'웹 프로그래밍 > DB' 카테고리의 다른 글
| LEFT JOIN 시 행 중복 문제 해결하기 (0) | 2022.10.04 |
|---|---|
| GROUP BY, 집계함수 (1) | 2022.10.03 |
| 테이블 JOIN 방법(INNER JOIN, OUTER JOIN) (0) | 2022.10.02 |
| 트랜잭션(Transaction) (0) | 2022.06.28 |
| SQL 기초 (0) | 2022.03.30 |