3주차
DB
1. 데이터베이스란?
데이터베이스는 여러 사람이 공유하여 사용할 목적으로 체계화해 통합, 관리하는 데이터의 집합이다.
이런 데이터베이스를 관리하고 운영하는 소프트웨어를 DBMS(Database Management System)
현재 사용되는 DBMS 중에는 관계형 DBMS가 가장 많은 부분을 차지하며, MySQL도 관계형 DBMS에 포함됩니다.
RDBMS의 데이터베이스는 테이블(table)이라는 최소 단위로 구성되며, 이 테이블은 하나 이상의 열(column)과 행(row)으로 이루어져 있습니다.
[참고한 포스팅]
2. 관계형 데이터베이스 시스템 (RDBMS), NoSQL
- RDBMS
- NoSQL
https://khj93.tistory.com/entry/Database-RDBMS%EC%99%80-NOSQL-%EC%B0%A8%EC%9D%B4%EC%A0%90
설명이 매우 잘 돼있어서 따로 짜집기 하는 것보다 직접 들어가서 한 번 읽어보는 게 더 도움됨
https://velog.io/@alicesykim95/DB-DDL-DML-DCL-TCL%EC%9D%B4%EB%9E%80
NoSQL은 RDBMS의 한계를 극복하기 위해 RDBMS가 아닌 다른 형태의 data 저장 기술을 의미한다.
즉, 관계형 data 모델을 지양하며 대량의 분산된 data를 저장하고 조회하는 데 특화되어있다.
https://code-lab1.tistory.com/53
스키마란?
먼저 스키마란 - 데이터베이스의 구조와 제약조건에 관해 전반적인 명세를 기술한 것 입니다.
상세하게 말하면, 개체의 특성을 나타내는 속성(Attribute)과 속성들의 집합으로 이루어진 개체(Entity), 개체 사이에 존재하는 관계(Relation)에 대한 정의와 이들이 유지해야 할 제약조건들을 기술한 것입니다.
쉽게 정리하여, DB내에 어떤 구조로 데이터가 저장되는가를 나타내는 데이터베이스 구조를 스키마라고 합니다.
출처: https://jwprogramming.tistory.com/47 [개발자를 꿈꾸는 프로그래머:티스토리]
정보를 통합하고 조직화하는 인지적 개념 또는 틀을 말하며 '도식'이라고도 한다.
개념스키마
데이터 베이스의 전체적인 논리적 구조
- 데이터 베이스에 실제로 어떤 데이터가 저장되었으며 데이터간의 관계는 어떻게 되는가
- 스키마라고 하면 개념스키마를 의미
- 데이터 베이스당 하나만 존재
내부스키마
물리적인 저장장치 입장에서 DB가 저장되는 방법을 기술한 것
구체적으로 개념 스키마를 디스크 기억장치에 물리적으로 구현하기 위한 방법을 기술한 것으로서 주된 내용은 실제로 저장될 내부레코드 형식, 내부레코드의 물리적 순서, 인덱스의 유/무 등에 관한 것입니다.
그러나 DB는 내부 스키마에 의해서 곧바로 구현되는 것이 아니라 내부 스키마에 기술한 내용에 따라 운영체제의 파일시스템에 의해 물리적 저장장치에 기록됩니다.
실무적으로 내부스키마에 의해 DB의 실행 속도가 결정적으로 영향을 받기 때문에 DB의 구축목적에 따라
내부 스키마를 결정해야 할 필요가 있습니다.
- 데이터 베이스의 물리적 저장구조를 정의
- 디스크에는 어떤 구조로 저장할 것인가
- 데이터의 실제 저장방법을 기술
- 물리적인 저장장치와 밀접한 계층
- 시스템 프로그래머나 시스템 설계자가 보는 관점의 스키마
외부스키마
실세계에 존재하는 data들을 어떤 형식, 구조, 배치 화면을 통해 사용자에게 보여줄 것인가
- 하나의 DB에는 여러개의 외부스키마가 존재 가능하며 하나의 외부스키마를 여러개의 응용프로그램이나 사용자가 공용 사용 가능하다.
- 같은 DB에 대해서 서로 다른 관점을 정의할 수 있도록 허용
3. 데이터베이스 언어 (DDL, DML, DCL, TCL)
DDL (Data Definition Language) : 데이터 정의 언어
DDL은 명령어를 입력하는 순간 작업이 즉시 반영(Auto Commit)되기 때문에 사용할 때 주의해야 한다.
- 테이블 내의 컬럼명 또한 중복되지 않는 유일한 이름으로 명명해야 한다.
- 정의할 때 각 컬럼은 ,으로 구분하며 테이블 생성문의 마지막은 ;이다.
- 객체를 의미하는 것이므로 단수형으로 이름을 짓는걸 권고한다.
DML (Data Manipulation Language) : 데이터 조작 언어
DML은 Target 테이블을 메모리 버퍼 위에 올려두고 변경을 수행하기 때문에 실시간으로 테이블에 반영(Auto Commit)되지 않는다. 따라서 ROLLBACK으로 되돌릴 수 있으며 Commit 명령어를 통해 Transaction을 종료해야 해당 변경 사항이 테이블에 반영된다.
DCL (Date Control Language) : 데이터 제어 언어
TCL (Transaction Control Language) : 트랜잭션 제어 언어
DCL과 비슷한 맥락이지만 데이터를 제어하는 언어가 아닌 트랜잭션을 제어할때 사용한다. 논리적인 작업 단위를 묶어 DML에 의해 조작된 결과를 트랜잭션 별로 제어한다.
트랜잭션이란?
데이터베이스의 상태를 변화시키기 위해 수행하는 작업의 단위를 말한다. 보통 DBMS 성능을 초당 트랜잭션이 몇개가 실행되었는지로 측정한다. MySQL의 입력하는 모든 명령어들은 각각 하나의 트랜잭션이라고 할 수 있다.
트랜잭션(Transaction)의 사전적 의미는 거래이고,
컴퓨터 과학 분야에서의 트랜잭션(Transaction)은 "더이상 분할이 불가능한 업무처리의 단위"를 의미한다.
이것은 하나의 작업을 위해 더이상 분할될 수 없는 명령들의 모음,
즉, 한꺼번에 수행되어야 할 일련의 연산모음을 의미한다.
다음과 같은 상황이 있다고 가정하자.
- A는 매달 부모님에게 생활비를 송금받는다.
어느 날, 부모님이 A에게 생활비를 송금해 주기 위해 ATM을 이용했고 여느날 처럼 A의 계좌로 생활비를 송금했다. - 그러나 모종의 이유로 인하여 부모님의 계좌에선 생활비가 차감되었는데, A의 계좌에는 생활비가 입금되지 않았다.
계좌이체 행위를 풀어 쓴 것이다.
보다 시피 계좌이체 라는 행위는 인출과 입금 두 과정으로 이루어진다.
위와 같이 만약 인출에는 성공했는데, 입금에 실패하면 치명적인 결과가 나온다.
따라서 이 두 과정은 동시에 성공하던지 동시에 실패해야 한다. (하나로 묶음으로써 Atomic함을 의미한다)
이 과정을 동시에 묶는 방법이 바로 트랜잭션이다.
이와 같이, 데이터베이스와 어플리케이션의 데이터 거래(Transaction)에 있어서 안전성을 확보하기 위한 방법이 트랜잭션인 것이다.
따라서 데이터베이스에서 테이블의 데이터를 읽어 온 후 다른 테이블에 데이터를 입력하거나 갱신, 삭제하는 도중에 오류가 발생하면, 결과를 재반영 하는 것이 아니라 모든 작업을 원상태로 복구하고, 처리 과정이 모두 성공하였을때 만 그 결과를 반영한다.
출처: https://inpa.tistory.com/entry/MYSQL-📚-트랜잭션Transaction-이란-💯-정리 [👨💻 Dev Scroll:티스토리]
4. 정규화
https://mangkyu.tistory.com/110
- 정규화 목적
정규화의 기본 목표는 테이블 간의 중복된 데이터를 허용하지 않는 것이다.
이를 통해 무결성을 유지할 수 있으며 DB의 저장 용량도 줄일 수 있다.
데이터 무결성은 데이터의 정확성, 일관성, 유효성이 유지되는 것을 의미합니다.
관계형 데이터 모델에서 데이터의 중복성을 제거하여 이상 현상(Anomaly)을 방지하고, 데이터의 일관성과 정확성을 유지하기 위해 무손실 분해하는 과정을 말한다.
- 이상(Anomaly)개념 및 종류
정규화를 거치지 않은 데이터베이스 내에 데이터들이 불필요하게 중복되어 릴레이션 조작 시 발생하는 예기치 않은 현상을 말한다.
삽입 이상(Insertion Anomaly), 삭제 이상(Deletion Anomaly), 갱신 이상(Update Anomaly)이 있다.
https://velog.io/@wisdom-one/%EC%A0%95%EA%B7%9C%ED%99%94Normalization
- 정규화 과정
- 1NF, 2NF, 3NF, BCNF, 4NF, 5NF
[ 제1 정규화 ]
제1 정규화란 테이블의 컬럼이 원자값(Atomic Value, 하나의 값)을 갖도록 테이블을 분해하는 것이다.
[ 제2 정규화 ]
제2 정규화란 제1 정규화를 진행한 테이블에 대해 완전 함수 종속을 만족하도록 테이블을 분해하는 것이다.
[ 제3 정규화 ]
제3 정규화란 제2 정규화를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블을 분해하는 것이다.
[ BCNF 정규화 ]
BCNF 정규화란 제3 정규화를 진행한 테이블에 대해 모든 결정자가 후보키가 되도록 테이블을 분해하는 것이다.
5. 반정규화
- 반정규화 목적
- 반정규화 과정
- 테이블 분할, 중복 테이블 추가, 중복 속성 추가
https://lipcoder.tistory.com/337
'CS > 스터디' 카테고리의 다른 글
cs 스터디 6주차 (0) | 2022.11.22 |
---|---|
cs 스터디 5주차 (0) | 2022.11.15 |
cs 스터디 4주차 (1) | 2022.11.13 |
cs 스터디 (2주차) (0) | 2022.10.21 |
cs 스터디 (1주차) (0) | 2022.10.17 |