요약
- 데이터베이스 : 데이터를 많이 모아놓은 베이스. 컴퓨터 시스템에 저장된 정보나 데이터를 모두 모아 놓은 집합
- 사용 목적: 데이터를 휘발성으로 사라지게 하지 않고, 오래 기간 저장하며, 동시에 체계적으로 보관.
💡 데이터베이스의 개념 (By Oracle)
A database generally refers to a structured collection of structured information or data stored electronically in a computer system. The database is usually controlled by a database management system (DBMS). Data and DBMS are referred to as 'database systems' along with related applications, and are also collectively referred to as 'databases' for short. (Oracle)
데이터베이스 시스템(or 데이터베이스 or DB)
데이터 + 데이터베이스 관리 시스템 + 연관된 다른 어플리케이션들
작은 어플리케이션에서도 임시로 저장할 수는 있다. 그러나 컴퓨터를 껐다 켜면 사라지듯이 메모리의 데이터는 오래 보존이 되지 않고 다시는 읽어들일 수 없다. 따라서, 필요한 자료를 계속 보존하기 위해 데이터베이스를 사용한다.
데이터베이스 왜 쓸까?
서버에 계속 저장한다면?
특정 기간에 트래픽이 급격히 증가하는 서비스를 개발한다고 하자
- 서버 대수를 늘리거나(이중화): 데이터 통일해서 관리가 안됨
- 서버 사양을 높이거나: 하나가 죽으면 다 터진다
참고)
서버 노드js 데이터베이스 포트를 다르게 설정하면 컴터 1대에 서버, DB 모두 설치할 수 있다
필요할 때 언제든 내가 원하는 자료를 쉽게 읽어낼 수 있어야만 의미 있는 정보라고 할 수 있다. 데이터베이스에는 데이터가 아무렇게나 어질러 저장되지 않고 체계적으로 정리되어 입력된다.
요약
- 관계형 데이터베이스는 모든 데이터를 2차원 테이블에 저장.
- 테이블에 저장된 데이터들의 관계에 따른 분류: one-to-one, one-to-many, many-to-many
- one-to-one : A 테이블의 한 데이터는 B 테이블의 데이터 하나와만 연결.
- one-to-many : A 테이블의 데이터가 B 테이블의 여러 데이터와 연결.
- many-to-many : A 테이블과 B 테이블 모두 서로 여러 데이터와 연결.
Database의 분류
RDBMS, Relational DataBase Management System
데이터 사이의 관계에 기초를 둔 데이터베이스 시스템.
ㄴ관계: 표들 사이의 관계
관계형 데이터베이스에서 모든 데이터는 2차원 테이블(table)로 표현할 수 있다.
예) My books 테이블
행(row)과 열(column)으로 구성된 2차원 테이블.
각 로우는 저만의 고유 키(Primary Key)가 있다.
테이블의 가장 첫 컬럼은 언제나 id 이다. 각 로우는 언제나 고유한 번호를 갖고 있으며 이를 고유 키(Primary Key)라고 한다.
예)
Primary Key를 통해서 특정 로우를 찾거나, 인용(reference)할 수 있다.
관계형 데이터베이스는 각각의 테이블들이 서로 상호관련성
을 가지고 서로 연결되어 있다.
테이블끼리의 연결에는 3가지 종류 : One to One(일대일), One to Many(일대다), Many to Many(다대다) 관계.
테이블 A의 로우와 테이블 B의 로우가 정확히 일대일 매칭이 되는 관계
테이블 A의 로우(row) 하나는 테이블 B의 로우(row) 하나와 연결된다. 반대로 테이블 B의 로우 하나도 테이블 A의 로우 하나와 연결된다.
👉 해당 테이블 사이의 관계 : 일대일 관계.
identification numbers 라는 테이블은 원래 아래와 같은 형태였을 것이다
users 라는 테이블에 이름 데이터들을 이미 저장했는데, 같은 이름들을 중복 해서 저장하면 불필요한 메모리를 사용하므로 user_id 를 저장해주는 것이다.
: 참조한다
예)
다른 테이블의 pk를 참조한 컬럼에 입력되어 있는 숫자들에도 이름이 있다.
: Foreign Key, 외래키
identification numbers 테이블의 user_id 는 모두 FK 라고 부른다.
👉 테이블 Users와 테이블 Indentification은 서로 일대일 관계이다.
테이블 A의 로우가 테이블 B의 여러 로우와 연결이 되는 관계.
예) 작성자(one) - 댓글들(many)
예) 펫 서비스
Users 테이블의 로우 하나는 Pets 테이블의 여러 로우와 연결된다.
Pets 테이블의 로우 하나는 Users 테이블의 로우 하나와 연결된다.
👉 One To Many 관계, 일대다 관계, 1:N
👉 users 테이블이 one, pets 테이블이 many
pets 테이블의 user 컬럼은 users 테이블의 id(pk)를 참조한다
1:1
은 두 테이블이 서로가 서로의 오로지 한 로우에만 연결되어야 한다.
1:N
은 한 테이블의 로우 하나에 다른 테이블의 로우 여러개가 연결될 수 있다.
테이블 A의 여러 로우가 테이블 B의 여러 로우와 연결이 되는 관계를 many to many 라고 한다.
예) 작가(many) - 책(many)
👉 [id,작가] < [id, 작가_id, 책_id](중간 테이블) > [id,책]
👉 authors 컬럼에 해당하는 로우 하나에 너무 여러 데이터가 들어가있기 때문에 데이터베이스에는 이런 형식으로 저장할 수 없다. (정규화 제 1법칙
위반: 테이블의 행 하나에는 딱 하나의 데이터만 들어가야 한다)
아래와 같이 풀어서 테이블을 만들어야 한다:
책 한 권이 늘어날 때마다, 작가의 수에 맞춰서 똑같은 데이터를 또 여러번 저장해 주어야 하는 문제 발생
👉 Foreign Key 를 이용하면 중복된 데이터를 줄일 수 있다
Authors 테이블의 로우 하나는 Books 테이블의 여러 로우와 연결된다.
Books 테이블의 로우 하나 또한 Authors 테이블의 여러 로우와 연결된다
이렇게 두 테이블이 서로 각자 다른 테이블의 여러 데이터와 연결 될 때에는 두 테이블에 속한 데이터의 조합을 입력하기 위한 중간 테이블이 하나 생성된다.
👉 Many To Many 관계, 다대다 관계, N:N
👉 테이블 authors와 테이블 books는 서로 다대다 관계이다.
Foreign key(외부키) 라는 개념을 사용하여 주로 연결한다
하나의 테이블에 모든 정보를 다 넣으면 동일한 정보들이 불필요하게 중복되어 저장된다.
더 많은 디스크를 사용하게 되고, 잘못된 데이터가 저장 될 가능성이 높아집니다.
normalization(정규화)
이라고 합니다.