[데이터베이스설계론] 3주차 수업 내용 정리
04.25 3주차 수업 내용 정리
DBMS의 역할
데이터 모델링
: 실세계의 데이터를 시스템 내에서 표현하기 위한 기호계
- 개념 모델: 데이터베이스화의 대상이 되는 실세계의 데이터 구조와 제약을 기호화, 온도를 센서로 컴퓨터에 입력하거나 실제 지도를 컴퓨터에 읽어들이는 등
- 이론 모델(개념 스키마): 개념 모델로 표현한 것을 DBMS로 관리 가능한 데이터베이스로의 표현으로 변환
- 이론 모델의 종류: 계층형, 네트워크, 관계, NoSQL(Not only SQL)
이론 모델의 종류
- 계층형 모델
- 대표적으로 IBM IMS(Information Management System), 1960s
- 데이터를 트리 구조 형태로 표현하는 데이터베이스 모델 -> 루트를 중심으로 하는 부모-자식 관계 존재, 인간의 직감적 구조에 가까워 파악하기 편함
- 정해진 패턴 이외의 검색에는 약함, 유연성이 낮음
- 부모 하나에 자식 데이터 여러 개가 존재할 수 있으나, 반대는 불가 -> 다대다 관계의 표현 불가
- 데이터 중복
- 데이터 독립성 없음(부모에 의존함)
- 네트워크형 모델
- 미국의 GE(CODASYL)의 Integrated Data Store, 1960s
- 데이터가 그래프 구조로 표현됨
- 레코드와 셋 개념을 사용하며, 하나의 데이터가 여러 부모를 가질 수 있어 다대다 관계도 표현 가능
- 네트워크 구조로 유연한 검색
- 포인터 이동으로 데이터에 접근
- 사이즈가 커지면 구조가 복잡해져 구현이나 파악이 어려워짐
- 관계 데이터 모델
- Ted Codd 박사에 의해 제안됨, 1970s
- 데이터를 테이블 형태로 표현하며 테이블 전체를 관계라고 함, 각 테이블은 행(튜플)과 열(속성)로 구성됨
- 속성에는 이름이 붙으며, 속성 이름의 나열을 스키마라고 함
- 튜플 수는 카디널리티 Cardinality
- 수학 집합론(관계 개념)을 기반으로 함, 테이블 간은 공통된 속성(외래 키)을 통해 암시적으로 연결됨
𝑡 ∈ 𝑅 ⊂ 𝐷1 × 𝐷2 × ⋯ × 𝐷n
: 𝑡는 튜플, 𝑅은 관계, 𝐷i는 정의역, n은 지수를 가리킴- 직관적이고 데이터 독립성이 높으며, 표준 SQL을 지원함
- 기본적으로 1:1, 1:N 관계이며 M:N 관계는 중간 테이블로 표현함
- 원하는 정보를 조건으로 질의해 데이터에 접근함
- 현재로서 가장 대표적인 데이터베이스
- 1980s부터 제품화, 실용화되어 Oracle, MySQL, SQLite 등이 등장
- NoSQL(Not only SQL)
- 컬럼 패밀리 데이터 스토어, 키-값 데이터 스토어, 도큐먼트 데이터 스토어 등
- 관계 데이터 모델의 약점인 스키마 고정을 개선
- 속성을 사전에 정할 필요가 없는 스키마레스 -> 다양한 데이터에 유연한 대응 가능
- 높은 사용성과 확장성 Scalability
- 데이터가 급히 증가하여, 데이터 세트를 나누어 여러 서버에 저장
- 하나의 서버에 문제가 생겨도 데이터를 유실하지 않는 데이터 저장 방식
- 병렬화에 의한 데이터 처리 시간의 고속화
- 컬럼 패밀리 데이터 스토어
- 구글의 웹 크롤러인 GoogleBot이 수집해 온 웹페이지를 효율적으로 저장해 검색하기 위한 Google Bigtable이 원형
- 여러 개의 컬럼을 묶어 패밀리 단위로 관리하는 개념, 관계 데이터 모델의 테이블과 비슷하지만 구조가 훨씬 유연하며 동적으로 동작함
- 각 행은 고유의 키를 가지며, 각 행마다 컬럼의 수가 종류가 다를 수 있음 -> 행 키와 속성(컬럼)이 하나의 관리 단위가 됨
- 압축, 검색 효율이 높음 -> 복수의 비슷한 데이터가 저장되어 있음
- 집계 쿼리에 강함 -> 대상 데이터가 하나의 컬럼에 소속됨
- 확장이 용이함 -> 컬럼이 거의 독립적으로 관리되므로, 새로운 컬럼을 새로운 노드에 저장하기 쉬움
- 키-값 데이터 스토어
- 아마존의 Dynamo 데이터베이스에 쓰이는 모델, 2012
- 데이터를 키(아이디 또는 이름)와 값(키에 연결된 실제 데이터)의 쌍으로 저장하는 아주 단순한 구조의 데이터베이스, 파이썬의 딕셔너리와 같은 구조
- 높은 확장성
- 범위 쿼리에 약함 -> 최근에는 정렬된 키-값 데이터 스토어로 대응
- 도큐먼트 데이터 스토어
- 객체 지향 데이터베이스로부터 영향을 받음
- 데이터 계층을 단일 객체에 집어넣음
- 표준화된 API가 존재하지 않음
데이터베이스 언어
- 데이터베이스 정의 언어(DDL: Data Definition Language)
- 데이터베이스 관리자용
- 데이터베이스에의 접근 권한을 관리
- 데이터 조작 언어(DML: Data Manipulation Language)
- 일반 유저용
- 데이터베이스의 검색, 갱신
- SQL
- 데이터 조작, 정의 언어
- 검삭, 통계 연산, 갱신 등의 기능을 수행
- 기본 문법:
SELECT 속성 열 FROM 관계 이름 열 WHERE 검색 조건
트랜잭션의 관리
- 트랜잭션: 하나의 작업 단위, 또는 논리적으로 묶인 여러 개의 작업을 하나처럼 처리하는 것
ex: A 계좌에서 1000원 출금 → B 계좌에 1000원 입금
- 데이터의 신뢰성과 일관성을 지키기 위함
- 복수의 데이터 조작이 제대로 이루어질 수 있도록, 동일한 데이터베이스를 동시에 이용할 수 있도록
- 동시성 제어를 위해 락을 도입: 다른 트랜잭션이 접근하지 못하도록 해 데이터의 접근을 제어
- 두 사용자가 동시에 같은 데이터를 수정하여 마지막 작업만 반영되는 일을 방지
- 한 사용자가 읽고 있는 중에 다른 사용자가 데이터를 수정해, 읽은 데이터가 틀리는 일을 방지
데이터베이스 동작 환경
- 웹 시스템
- 데이터베이스 서버가 복수의 어플리케이션 서버를 이용
- 어플리케이션 서버
- Java Database Connectivity
- 특정 데이터베이스에 의존하지 않는 자바 언어용의 드라이버
- 어떤 데이터베이스든 자바 언어로 쓰여진 데이터베이스라면 이용 가능
- ODBC에밖에 대응하지 않는 DBMS에 대해서는 JDBC/ODBC 드라이버를 사용함
- 파이썬
- 데이터베이스별 다른 드라이버가 존재
- 파이썬과 PostgreSQL