데이터베이스란?
데이터베이스를 한 마디로 정의하면 ‘데이터의 집합’이라고 할 수 있습니다.
데이터베이스에는 일상생활 대부분의 정보가 저장되고 관리됩니다. 오늘 보내거나 받은 카카오톡 메시지, 인스타그램에 등록한 사진, 버스/지하철에서 찍은 교통카드, 카페에서 구매한 아이스 아메리카노 등의 정보가 모두 데이터베이스에 기록됩니다.
특징
- 실시간 접근성 (Real-time-accessibility)
- 계속적인 변화(Continuous Evolution)
- 동시 공유 (Concurrent Sharing)
- 내용의 의한 참조 (Content Reference)
설계순서
요구조건 분석 -> 개념적 설계 -> 논리적 설계 -> 물리적 설계 -> 구현
용어
밑에는 데이터베이스 테이블 입니다.
데이터 베이스는 row(행) 과 column(열)로 이루어져 있는데요, 각 열에는 속성(Attribute)들이 들어가고 각 행에는 튜플이 들어갑니다.
튜플(Tuple)은 테이블 안에 하나의 행을 말하는것으로 row또는 레코드(record)라고 불립니다. 각 개체들(학생들)이 들어가겠죠?
차수 (degree) : 하나의 테이들안에 속성의 갯수 (열 column 의 갯수와 같습니다)
기수 (cardinality) : 테이블에 들어있는 튜플(레코드)의 갯수와 같습니다. (제목을 제외한 행 row의 갯수와 같습니다)
각 개체들의 갯수니까 제목은 당연이 빠져야겠죠??
저 위에 표의 차수는 4 , 기수(카디널리티)는 5가 되겠죠?
도메인(Domain) : 테이블내에 각각의 속성들이 가질수 있는 값들의 집합
성별의 도메인으로 'gender'를 정의 하면 gender 도메인은 {남자 ,여자} 라는 집합을 가지겠죠?
데이터에 의도된 값만 저장하기 위한 것입니다.
뷰(View) : 하나 이상의 기본 테이블로 부터 유도된 가상의 테이블
간단한 질의어(query)를 통해서 간단하게 관리하고 조회할 수 있습니다. (나중에 상세설명하겠습니다)
트랜잭션(Transaction) : 데이터베이스내에 하나의 작업 수행을 위한 연산들의 집합
- SELECT : 조회
- INSERT : 삽입
- DELETE : 삭제
- UPDATE : 갱신, 수정
서비스에서 데이터베이스 수정을 할때 명령어들을 입력하는데, 그 명령어들의 집합을 말합니다.
트랜잭션은 명령 연산들의 집합, 여러 개의 작업을 하나로 묶은 실행 유닛을 말합니다.
각 트랜잭션은 하나의 특정 작업으로 시작을 해서 묶여 있는 모든 작업들을 다 완료해야 정상적으로 종료합니다.
ACID(트랜잭션의 안정성)에는 4가지가 있습니다.
- 원자성 (Atomicity)
- 일관성 (Consistency)
- 독립성 (Isolation)
- 지속성 (Durability)
원자성은 트랜잭션이 데이터베이스에 무조건 모두 반영되거나 모두 반영되지 않아야하는 것입니다.
트랜잭션에 있는 모든 명령들은 하나도 빠짐없이 반영이 되야되고, 여러 명령중 하나라도 오작동하면 다른 명령어들도 다 실패하도록 해야됩니다.
잘이해가 안되시나요?
하나의 단위(트랜잭션)로 묶여있는 여러 작업(연산)이 부분적으로 실행된다면 문제가 생깁니다.
예를 들어 계좌이체를 할 때에는 다음과 같은 두 단계가 있습니다.
- A 계좌에서 출금한다.
- B 계좌에 입금한다.
두 단계를 하나로 묶은것이 계좌이체 '트랜잭션'이 되는데요, 두 작업은 당연히 모두 반영되야되고, 출금이나 입금에 문제 생기면 모두 실패하도록 해야합니다. 입금에서 오류나도 출금이 정상 처리되면 안되고, 다 실패해야하겠죠?
이 두단계가 다 실행이 되야되고, 다 실행 못할거면 다 실패하도록 해야하는게 '원자성'입니다.
일관성은 하나의 트랜잭션이 수행됐을때 항상 데이터베이스가 유효해야합니다.
하나의 트랜잭션 이전과 이후, 데이터베이스의 상태는 이전과 같이 유효해야 하는거죠.
예를 들어 ‘모든 고객은 반드시 이름을 가지고 있어야 한다’는 데이터베이스의 제약조건이 있다고 하겠습니다
- 이름이 없는 고객을 추가한다.
- 기존 고객의 이름을 삭제한다.
이 두 트랜잭션은 수행이 되면 데이터베이스가 유효하지 않게됩니다. 일관성이 깨지는거죠
그래서 이 트랜잭션 요청을 하면 수행되지 않도록 막아햐합니다.
독립성
모든 트랜잭션은 다른 트랜잭션으로부터 영향을 받지 않고 독립되야 한다는 것입니다.
두 트랜잭션 , 또는 여러 트랜잭션이 수행될때, 동시에 실행될 때와 차례대로 연속으로 실행될 때의 데이터베이스 상태가 동일해야 한다는 것입니다.
동시에 수행해도 트랜잭션끼리 순서를 가지계되고 차례대로 수행하게되는데, 다른 트랜잭션은 한 트랜잭션이 수행되는 동안 끼어들수 없고, 한 트랜잭션이 끝날때까지 기다려야합니다.
만원을 가진 A가 B,C에게 6천원을 동시에 보낼때, 먼저 B에게 계좌이체하고, C에게는 잔액부족으로 실패해야하는거죠.
A의 잔액이 -2000원이 되고 동시에 6천원을 보는것이 아니라.
지속성 하나의 트랜잭션이 성공적으로 수행되었다면, 해당 트랜잭션에 대한 로그가 남아야하는 성질을 말한다.
만약 런타임 오류나 시스템 오류가 발생하더라도, 해당 기록은 영구적이어야 한다는 뜻입니다.
스키마 (schema) : 데이터데이스의 구조와 제약조건에 관한 전반적인 명세를 말합니다.
무슨무슨 속성이 있고 그 속성의 자료형은 무엇인지(학번 속성은 정수 , 이름속성은 문자열,...)등등을 말합니다.
앞으로 배울 스키마는 당연히 물리적 설계(내부 스키마)가 되겠죠?
- 내부 스키마(물리) : 프로그래머(개발자)가 정의하는 데이터베이스
- 개념 스키마(논리) : 기관, 조직 , 회사가 정의하는 데이터베이스
- 외부 스키마(서브) : 사용자가 필요로 하는 데이터 베이스
'Back-End > 🐬MySQL (RDBMS)' 카테고리의 다른 글
mySQL 주요 데이터타입(자료형) (0) | 2022.05.04 |
---|---|
MySQL 데이터베이스, 테이블 생성하기 (0) | 2022.05.04 |
윈도우(window) MySQL 설치하기 + 서버 실행하기 (0) | 2022.04.30 |
맥(Mac) MySQL 설치 (+workbench) - 맥북 SQL 설치 + 서버 실행하기 (0) | 2022.04.30 |
DBMS 데이터베이스 관리 시스템의 특징과 종류 , SQL (0) | 2022.04.30 |
댓글