데이터베이스란?
데이터베이스란 여러 사람들이 공유하고, 사용될 목적으로 통합하여 관리되는 데이터의 집합
데이터 베이스를 사용하기 이전에는 파일 시스템을 이용하여 데이터를 관리했다.
이렇게 저장된 파일들을 업무에 사용할려고 하니... 각 데이터가 중복에다가 형태가 다르다는 문제가 발생하게되었다. 이러한 파일 시스템의 단점을 극복하기 위해서 나타난 시스템이 데이터베이스(DB)이다.
데이터베이스의 특징
1. 데이터의 독립성
하위 단계의 데이터 구조가 변경되더라도 상위 단계에 영향을 미치지 않는 속성 > 3-스키마 구조를 통해 구현
파일 시스템의 응용 프로그램과 데이터가 상호 밀접하게 연결되어있다.
- 논리적 독립성: 응용 프로그램에 영향을 주지 않고, DB 논리적 구조를 변경할 수 있는 능력 / 많은 응용 프로그램이 제각각 요구하는 다양한 형태의 논리적 구조로 매핑시킬 수 있는 능력
- 물리적 독립성: 응용 프로그램이나 데이터베이스의 논리적 구조에 영향을 미치지 않고 데이터의 물리적 구조를 변경
스키마란?
데이터베이스의 구조와 제약조건에 관해 전반적인 명세를 기술한 것
개체의 특성을 나타내는 속성, 속성들의 집합으로 이루어진 개체, 개체 사이에 존재하는 관계로 이루어짐
2. 데이터의 무결성
데이터 유효성 검사를 통해서 잘못된 데이터가 입력되는 것을 방지한다.
예를 들어 이름 속성에 "Hong"이라는 문자는 입력 가능하지만, 777이라는 숫자가 입력될 수 없다.
3. 데이터 일관성
연관된 정보를 논리적인 구조로 관리함으로써 어떤 하나의 데이터만 변경했을 경우, 연관된 데이터가 모두 변경되며 데이터의 불일치를 배제할 수 있다.
파일 시스템의 경우 중복된 데이터 중 하나를 변경했을 때 데이터 간에 불일치가 발생할 수 있다.
4. 데이터의 중복 최소화
데이터를 통합 관리하여 데이터 중복 문제를 해결할 수 있다.
데이터베이스 키
데이터의 중복을 막기 위해서 데이터베이스에는 키라는개념이 존재한다.
예를들어 이름, 나이, 학교 등은 중복될 수 있다. 이때 각각의 개체를 구분하기 위해서는 그 기준이 되는 속성이 필요하다.
1. 슈퍼키: 유일성 O, 최소성 X
유일성의 특성을 만족하는 속성 또는 속성들의 집합이다.
예를 들어 (주민번호, 이름, 나이)라는 키를 설정했을 때, 이 값들이 모두 같은 개체들은 존재하지 않을 것이다. 하지만 위 키에서 나이를 빼게 되더라도 유일성은 유지될 것이다. 따라서 위의 키는 유일성은 만족하지만, 최소성은 만족하지 않는다.
2. 후보키: 유일성 O, 최소성 O
슈퍼키 중에서 최소성을 만족하는 속성 또는 속성들의 집합이다.
유일성: 하나의 키 값으로 객체를 유일하게 식별할 수 있는 성질
최소성: 키를 구성하는 속성 중 꼭 필요한 최소한의 속성들로만 키를 구성하는 성질
3. 기본키
후보키 중 선택받은 키, 여러 개의 후보키 중에 하나를 선택해서 사용해야하며 아래와 같은 기준이 있다.
1. Null 값을 가질 수 없다.
2. 값이 자주 변경되지 않는다.
3. 단순한 후보키를 기본키로 선택한다.
4. 대체키
위의 기준을 지키지 못해 기본키가 되지 못한 후보키들이다.
5. 외래키
다른 관계 테이블의 기본키를 참조하는 키를 말한다.
이는 데이터의 무결성과 연결된다. 만약 주문(주문정보, 고객ID) <-> 고객(ID, 고객정보)라는 관계가 있을 때 주문 테이블의 고객ID에 입력한 값이 고객 테이블에 없는지 확인하고, 입력된다.
데이터베이스 종류
DBMS(DataBase Management System, 데이터베이스 관리 시스템)은 시간에 따라서 새로운 모델들이 나타났다. 기존의 단점을 보완하기 위해서 새로운 모델이 만들이지기 때문이다.
이를 데이터 저장 방법에 따라 다음과 같이 분류할 수 있다.
계층형 데이터베이스
- 역사가 가장 오래된 DBMS, 폴더와 파일 등의 계층 구조로 데이터를 저장하는 방식
- 데이터 간의 관계가 트리 형태의 구조이다. 부모-자식관계로 표현되며 이는 일대다로 구성된다.
- 구조가 간단하고 구현/수정/검색이 쉽지만, 다대다 관계 처리가 불가능하고 구조 변경이 어렵다.
관계형 데이터베이스
- 행과 열을 가지는 표 형식 데이터를 저장하는 데이터베이스, SQL을 사용하여 데이터를 처리한다.
- 데이터 모델링이 간단하지만, 비정형 데이터를 다루거나 실시간 분석에는 적합하지 않다.
NoSQL
- Not Only SQL의 줄임말
- 데이터 간에 관계를 정의하지 않는 데이터베이스 모델, 데이터 구조를 알 수 없거나 자주 변경하지 않는 경우 사용
- 기존 SQL의 복잡도와 용량의 한계를 극복하기 위해 만들어짐
- 중복을 계속 업데이트하거나, 수정시 중복된 모든 컬렉션에 수정하는 단점이 있음
데이터베이스 제품
SQL
Oracle
현재 가장 많이 쓰이는 RDBMS 중 하나로 사실상 표준이다.
PostgreSQL
오픈 소스 커뮤니티가 개발한 RDBMS, 다양한 데이터베이스 객체를 사용자가 임의로 만들 수 있는 기능을 제공함으로써 실험적인 기능이나 독특한 구조를 가지기도 한다.
MySQL
마찬가지로 오픈 소스 커뮤니티에서 나타난 RDBMS, 처음에는 경량 데이터베이스라는 점을 강조해 필요한 최소한의 기능만을 갖추었지만, 지금은 기능이 확장됨
NoSQL
MongoDB
Document 지향 데이터베이스 시스템, JSON과 같은 동적 스키마형 문서들을 선호. 정해진 스키마가 없기 때문에 복잡한 구조를 쉽게 저장할 수 있다.
Apache Cassandra
여러 데이터 센터 및 클라우드에서 대량의 데이터를 관리하는 데에 적합. 최대한의 유연성과 빠른 응답 시간을 위해 서례되어 장애없이 많은 상용 서버에서 지속적인 가용성, 선형 확장성 및 운영 단순성을 제공
CQL 언어를 사용하여 데이터에 액세스 (CQL: Cassandra Query Language, Cassandra DBMS에 대한 기본 인터페이스)
Apache HBase
대량 데이터를 우수한 성능으로 데이터 일관성을 보장하면서 다뤄야할 때 사용
Hadoop의 산하 프로젝트로 시작된 데이터베이스로 Hadoop의 도구들과 상호 운영성이 좋음
'Engineering 💻 > DB' 카테고리의 다른 글
[MongoDB] Timezone(타임존) 문제와 해결 (feat.Python) (0) | 2022.02.19 |
---|---|
[DB] Index란 (feat. B+-Tree) (0) | 2022.02.13 |
[PostgreSQL] Python에서 다중 행을 Insert하는 다양한 방법과 비교 (0) | 2022.02.10 |