카테고리 없음

Database - (1) RDBMS란?

디지털랫드 2024. 4. 9. 19:41

(1) RDBMS란?

:relational data base management system

으로 기존 DBMS의 고급화버전이라고 생각하시면 됩니다.

 

원래는 우리가 폴더에 파일을 하나하나 정리하듯, 파일로 데이터를 관리하는 식이었습니다. 하지만 1980년대 컴퓨터가 상용화되었죠, 데이터규모가 걷잡을 수 없이 거대해지자 '데이터 창고'라는 뜻의 data base에서 한꺼번에 파일을 관리하게 되었죠. 데이터를 체계적으로 관리하기 위해 물류창고 같은 곳에 데이터를 쏟아부어 통합적으로 관리를 시작하게 된거예요.  그렇다면 물류창고를 관리하는 사람도 있어야 겠죠? 통합된 환경에서 데이터를 체계적으로 관리하는 시스템, 물류창고의 관리자! .. 우린 그걸(데이터베이스를 관리하는 시스템) DBMS라고 불렀습니다. 윈도우의 레지스트리,xml등이 있죠. 보다 쉽게 예로 들면 우리가 무언가 파일을 검색할 때 데이터 검색창(finder)을 통해서 파일을 찾고 관리하게 되었습니다.  그렇다면 RDBMS는 DBMS의 고급화버전이라고 했죠, 무엇이 달라진 걸까요?

 

컴퓨터의 역할이 커지면 커질수록 온갖 정보들이 데이터화 되어 기업간 거래량도 많아지니, 대규모 데이터를 관리하면서 수많은 사용자가 접근할 수 있는 환경이 필요해졌어요.

우선, 컴퓨터 한대, 즉 사용자 한명을 관리할 수 있었던 기존 dbms와 달리, rdbms는 수많은 사용자들이 데이터에 접근할 수 있도록 만들었습니다. 사람들은 기존

dbms를 사용하면서 이런 불만들이 생기곤 했었죠.

여기에 뭐가 있는지, 파일을 하나하나 열어봐야 했죠.

내가 회의자료를 만들었을떄 (메일 전송없이) 여러명의 사용자의 컴퓨터 속에서 확인가능하면 얼마나 좋을까? (단일사용자만 지원)

'과제_최최최종'이라고 쓰여진 파일에 내 학번을 잘못써서 그거 하나 수정했는데 다른 원본들도 한꺼번에 수정할 수는 없을까?(통일성을 유지하면서 일부 데이터 수정의 어려움)

그밖에,.. 파일을 열기 위해 매번 해당 application 이 필요하다든지... 데이터를 여러형태로 저장했을때 통일되지 못하는 점들 등등에

사용자들의 불편함이 이만저만 아니었어요. 

전반적으로 통일성, 통합성, 접근성을 용이하게 하기 위해 RDBMS가 탄생했습니다!

 

RDBMS의 relation은 table이라는 뜻과 같아요.

즉 데이터를 파일형태로 저장하는 기존방식과 달리, 테이블 형태로 저장하죠.

ted codd라는 사람이 1981년 고안한 개념이에요.

RDBMS라는 테이블식 데이터저장 시스템을 고안한 테드(이름마저)코드

 

그렇다면, 데이터베이스는 어떻게 구성되어 있는 걸까요?

크게 키값, 열, 컬럼, 테이블

이렇게 4가지 요소로 구성되어 있고

각 요소의 핵심키워드는 다음과 같아요.

key=indentifier

row=tuple

column=attribute

table=relation

보기 쉽게 그림으로 정리하자면,

테이블의 구성요소

이렇게 되겠죠.

 

그렇다면 우리가 배우는 SQL은 어떤 개념일까요?

앞서 프로그래밍언어는 컴퓨터가 이해하기 좋은 언어라고 했었죠.

컴퓨터에게 일을 시키게 하기 위해선 컴퓨터가 알아들을 수 있는 언어로 말을 해야 한다고요.

 

비슷한 원리로, DB(데이터베이스)를 다루기 위한 언어 체계가 SQL입니다.

 

<DB의 장점인, 데이터를 효율적으로 관리하면 무엇이 좋을까? ->>>>데이터 무결성(acid porperty)>


ACID property 이란?
....데이터 무결성

데이터의 무결성을 보장하기 위해서 데이터베이스 시스템은 다음의 트랜잭션 성질들을 지원해야 한다.

 

* Atomiciy (원자성)

  - 트랜잭션의 모든 연산들이 정상적으로 수행 완료 되거나 아니면 전혀 어떠한 연산도 수행되지 않은 원래 상태가 되도록 해야 한다. (All or Nothing)

 

* Consistency (일관성)

  - 동시에 수행되는 트랜잭션이 없는 상태에서의 트랜잭션 수행이 데이터베이스의 일관성을 보존해야 한다.

 

* Isolation (격리성)

  - 여러 트랜잭션을 동시에 수행되더라도 모든 트랜잭션 T1과 T2의 쌍에 대하여 데이터베이스 시스템은 T1에게 T1이 시작되기 전에 T2가 수행을 끝마쳤거나 아니면 T1이 수행을 끝마친 후에 T2가 수행을 시작하는 것과 같이 되도록 보장해야 한다. 따라서 각 트랜잭션은 시스템에서 다른 트랜잭션이 동시에 수행하고 있는지를 알지 못한다. 간단히 말하면 연산의 중간결과에 다른 트랜잭션이나 작업이 접근 할 수 없다는 성질이다.

 

* Durablility (지속성)

  - 트랜잭션이 성공적으로 수행 완료되고 나면 트랜잭션에 의해 데이터베이스에 변경된 내용은 시스템에 오류가 발생한다 하더라도 지속되어야 한다.

 

이러한 성질들의 첫 글자를 따서 ACID property 라고 부릅니다.

 

[출처] [Tip] ACID property 란?|작성자 열정발군



\

 

데이터 베이스는 기본적으로 다른 프로그래밍 언어를 사용해

"절차적"으로 명령을 수행할 수 있는데요, 

(원래 사용하던, 혹은 목적에 맞게 프로그래밍 언어를 사용하면 정말 편리하겠죠?)

DB가 가진 이 기능을 Cursor(커서)라고 합니다.

 

우리가 이 커서를 사용하기 위해선 기본 문법을 지켜야 하는데요,

커서 사용 방법은 다음과 같아요.

 

<커서를 만들고 사용하는 순서!>

  • DECALRE : 선언
  • OPEN : 커서 열기
  • FETCH : 하나의 행을 가져옴
  • CLOSE : 열었던 커서를 닫기
  • DELLOCATE : 커서와 커서 이름 또는 커서 변수 간의 관계를 제거
/* 커서 선언 */
DECLARE 커서이름 CURSOR FOR
    -- SQL Query
    
/* 커서 열기 */
OPEN 커서이름

/* 커서 한 행씩 불러오기 */
FETCH NEXT FROM -- 커서이름
	INTO -- 행의 값 저장 변수
WHILE @@FETCH_STATUS = 0 -- 행을 성공적으로 가져오면 해당 값 출력
BEGIN
	-- 수행할 쿼리 작성
    -- 예시) print(@변수명) : 각 불러온 행의 값 출력
    FETCH NEXT FROM 커서이름
    	INTO -- 행의 값 저장 변수
END

/* 커서 닫기 */
CLOSE 커서이름

/* 커서 자원 할당 해제 */
DEALLOCATE 커서이름

명시적커서 (정해진?

묵시적커서 (직접만듥?