데이터베이스 CS과제-1
데이터베이스는 일정 규칙과 규약을 통해 구조화되어 저장할 수 있는 데이터의 집합이다.
데이터베이스는 DBMS(DataBase Managerment System)이라는 소프트웨어에 의해 관리되며, 여러 명의 클라이언트가 데이터베이스에 접근,사용이 동시에 가능한 것이 DBMS에 동시성 제어 기능이 존재하기 떄문이다.
동시성을 제어하기 위해 DBMS는 공통적으로 Lock 기능을 제공하며, 실질적으로 공통접근 또한 내부적으로는 하나씩 실행되도록 트랜잭션을 직렬화 시킨 것이다. 이러한 동시성 제어의 궁극적 목표는 동시에 실행되는 트랜잭션 수를 최대화하면서도 입력,수정,삭제,검색 시 데이터 무결성이 유지되는 것에 있다.
이러한 트랜잭션 작업안에 포함되는 입력,수정,삭제,검색은 흔히 SQL(Strucutre Query Language)이라고 불리는 관계형 데이터베이스에서 사용하는 구조적 언어를 통해 작업이 가능해진다.
엔티티
엔티티는 흔히 말하는 객체의 성질과 유사한 개념으로 Java JPA에서도 DB와 직접적으로 연결되는 클래스를 Entity라고 Naming지어 사용한다. Entity내부 속성으로 존재하는 필드값들은 각 Table의 컬럼값이 된다.
약한 엔티티와 강한 엔티티
이는 JPA의 cascade를 생각하면 이해가 빠르다.
예시로, TEAM이라는 엔티티와 Member라는 엔티티가 존재한다.
이때, Member라는 엔티티는 약한 엔티티에 속하고 TEAM은 강한 엔티티에 속하게 될것이다.
TEAM이 사라지게되면 그에 속한 MEMBER들은 사라지게되지만 MEMBER가 사라진다고 TEAM이 사라지지는 않기 때문이다.
릴레이션
릴레이션은 우리가 흔히말하는 RDBMS에서의 Table이다. 객체 단위라고 생각하면 편하다.
테이블과 컬렉션
아마 NoSql을 접하지 못한 사람에겐 익숙하지 않을 단어인 컬렉션은 MongoDB와 같은 NoSQL에서 사용하며 Key-Document 모델에 해당하는 데이터베이스에서 사용한다. 여기서 Document를 Value값으로 쓰기에 Key하나에 객체가 매핑되어 사용되는 것으로 이해하면 된다.
속성
속성은 테이블에서 관리하는 고유 컬럼값을 말한다. 한 테이블에는 테이블과 연관된 속성 값들로만 서비스 요구사항을 분석하여 작성하기에 RDBMS는 일관성과 무결성을 보장한다.
도메인
도메인이란 테이블의 속성들이 가질 수 있는 값의 집합을 의미한다
필드와 레코드
앞서 계속 설명되는 Table은 필드와 레코드로 구성됩니다. 필드는 고유 식별자 즉, 데이터의 타입을 말하고 레코드는 하나의 Primary Key에 대한 행 단위의 데이터 값을 말한다.
필드 타입
필드는 각 타입을 갖게된다. 예를 들어 이름은 문자열 나이는 숫자와 같은 타입을 갖게된다.
이는 흔히 Java에서 사용되는 자료형과 비슷한 개념이다.
숫자타입
- TINYINT
- SMALLINT
- MEDIUMINT
- INT
- BIGINT
날짜 타입
- DATE
- DATTIME
- TIMESTAMP
문자타입
- CHAR
- VARCHAR
- TEXT
- BLOB
- ENUM
- SET
Char vs VarChar
Char와 Varchar 모두 문자타입을 입력받는 자료형으로서 CHAR(30)과 같은 형태로 글자 수를 제한하여 사용한다.
이때 맥시멈 값은 CHAR는 0~255 VARCHAR는 0~65535 값 사이인데 이때 CHAR는 글자수가 선언한 값으로 무조건 고정되고 VARCHAR의 경우는 용량이 가변적이라는 차이점이 존재한다.
그리고 VARCHAR는 사용하지 않은 메모리의 용량만큼이 회수되지만 CHAR의 경우 고정한 값을 다쓰지 않아도 잉여메모리로 존재하게 된다.
Text와 BLOB
TEXT는 큰 문자열 저장에 자주사용되며, 게시판에 자주이용된다.
BLOB은 이미지,동영상등의 데이터를 저장하지만 요새는 url을 VARCHAR로 저장하는 방식을 이용
관계
관계형 데이터 베이스 RDB는 타 테이블과 연관관계를 맺을 수 있는 특성이 있고 이는 Foriegn Key라는 특성을 통해 알 수 있다.
관계에는 세종류가 존재한다.
1:1관계
각 테이블이 종속적인 관계가 아닌 동등한 관계로 유저가 하나의 이메일 만을 생성할 수있다면 유저와 유저 이메일 테이블은 1:1 관계이다.
1:N관계
하나의 테이블에 여러개가 종속적일 수 있는 관계를 뜻한다.
회원은 배달의 민족에서 여러개의 음식을 주문할 수 있기에 해당 예제가 이에 속한다.
N:M 관계
학생과 강의의 관계가 이러한 N:M관계에 속한다. 해당 경우 중간 테이블을 만들어 처리
키
테이블 간의 관계를 조금 더 명확하게 하고 테이블의 인덱스를 위해 설정된 장치로 기본키, 외래키, 후보키, 슈퍼키, 대체키가 존재한다.
- 기본키
- PK라고 부르며 유일성과 최소성을 만족하는 키로 해당테이블의 고유식별자로 사용된다. - PK는 중복되어서는 안되며 복합키를 사용하는 것 또한 권장되지 않는다.\ - 보통 자연키와 인조키 중 골라 선택
자연키
유저 테이블을 구성한다고 가정했을 때 사람에게 중복되지않는 키는 주민등록번호 밖에 없을 것이다. 이처럼 경우의 수를 배제하다 중복되지 않는것을 자연스럽게 추출할 수 있는 것을 자연키라고 한다.
인조키
인위적으로 만들어낸 고유값으로 sequence 형태의 값을 AI(Auto Increment)하는 형식으로 쓴다.
외래키
타 테이블의 기본키를 참조하는 값으로 관계를 식별하는데 사용한다.
외래키는 중복되어도 괜찮다.
후보키
후보키는 기본키가 될수 있는 후보들이며 유일성과 최소성을 동시에 만족하는 키
대체키
대체키는 후보키가 두개 이상일 경우 어느 하나를 기본키로 지정하고 남은 키
슈퍼키
슈퍼키는 각 레코드를 유일하게 식별할 수 있는 유일성을 갖춘 키
ERD와 정규화 과정
ERD는 데이터 베이스를 구축할 때 기초적인 뼈대 역할을 하는 것으로 각 테이블간의 관계를 정의하야 도표로 나타낸 것을 말한다.
ERD의 중요성
데이터베이스를 구축한 이후에도 디버깅 또는 프로세스 재설계가 필요한 경우에 설계도 역할을 담당한다.
데이터를 구성하는데 유용하지만 비정형 데이터를 충분히 표현할 수 없다.
> 비정형 데이터 : 비구조화 된 데이터를 말하며 데이터 모델이 정의 되어 있지않거나 정리되지 않은 정보 >
정규화 과정
정규화 과정은 테이블 간의 잘못된 종속 관계로 인해 데이터베이스 이상현상이 일어나 이를 해결하거나 저장 공간을 효율적으로 사용하기 위해 테이블을 여러개로 분리하는 과정
> 이상현상: 데이터의 추가적인 삽입 또는 연관된 삭제와 같은 문제를 뜻한다. >
정규화 과정은 정규형 원칙을 기반으로 정규형을 만들어가는 과정이며, 정규화된 정도는 정규형으로 표현한다.
정규형 원칙
정규형의 원칙이란 같은 의미를 표현하는 테이블이지만 향상된 구조로 설계되어야하고, 자료의 중복성을 최소화하되 독립적 관계는 별개의 테이블로 표현해야하는 것을 말한다.
제 1정규형
테이블의 모든 도메인이 더 이상 분해될 수 없는 원자 값만으로 구성되어야한다. 테이블의 속성 값중 한개의 기본키에 대해 두개 이상의 값을 가지는 반복집합이 있어서는 안된다.
제 2정규형
테이블이 제 1정규형을 준수하며 부분 함수의 종속성을 제거한 형태
부분 함수의 종속성 제거란 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속적인 것을 말한다.
다만, 릴레이션 분해시 정보손실이 발생하지 않는 무손실 분해로 분해되어야한다.
제 3정규형
제 2정규형을 준수하며, 기본키가 아닌 모든 속성이 이행적 함수 종속을 만족하지 않는 상태
> 이행적 함수 종속 : 이행적 함수 종속이란 A→B와 B→C가 존재한다면 논리적으로 A→C가 성립하는데, 이때 집합 C가 집합 A에 이행적으로 함수종속이 되었다고 한다. >
보이스/코드 정규형
보이스/코드 정규형(BCNF)는 제 3정규형을 준수하며, 결정자가 후보키가 아닌 함수 종속관계를 제거하여 테이블의 함수 종속관계에서 모든 결정자가 후보키인 상태
> 결정자: 함수 종속관계에서 특정 종속자를 결정짓는 요소, X→Y일 떄 X는 결정자 Y는 종속자이다. >
트랜잭션과 무결성
트랜잭션
트랜잭션은 데이터베이스에서 하나의 논리적기능을 수행하기위한 작업의 단위를 뜻하며 데이터 베이스에 접근할 때 쓰는 쿼리를 여러개로 묶어 하나로 묶는 단위입니다. 이를 통해 무결성과 일관성이 보장됩니다.
원자성(Atomicity)
- 트랜잭션이 모두 DB에 반영되거나,혹은 전혀 반영되지 않아야합니다.
- 이를 통해 데이터의 무결성이 보장됩니다.
커밋과 롤백
커밋은 여러 쿼리가 성공적으로 처리되었다고 확정하는 명령어이며, 트랜잭션 단위로 수행되며 변경된 내용이 모두 영구적으로 저장되는 것을 뜻한다.
하지만 트랜잭션 작업이후 에러 또는 이슈가 발생할 수 있고, 이때 이전상태로 되돌릴 떄 사용하는 것을 롤백이라고 한다.
트랜잭션 전파
트랜잭션을 수행할 떄 커넥션 단위로 수행하기 떄문에 이를 매번 넘겨주기 힘들어 트랜잭션관련 메서드의 호출을 하나의 트랜잭션에 묶이도록 하는 것을 트랜잭션 전파라고한다.
일관성(Consistency)
- 트랜잭션의 작업 처리 결과는 항상 일관성이 존재해야한다.
- 허용된 방식으로만 데이터를 변경해야한다.
독립성(isolation)
- 둘 이상의 트랜잭션이 병행실행될 때, 다른 트랜잭션 연산에 끼어들 수 없다.
- 순차적 접근이 아닌 동시성을 보장하여 수행
- 동시성과 독립성은 반비례한다.
- 독립 수준에 따라 Panthom Read, Non-repeatable read,dirty read가 존재
팬텀리드
팬텀 리드는 한 트랜잭션 내에서 동일한 쿼리를 보냈을 때 해당 조회 결과가 다른 경우를 말한다.
반복가능하지 않은 조회
한 트랜잭션 내에 같은행에 두번 이상 조회가 발생하였을 때 조회되는 값이 서로 다른 경우를 가르킨다.
더티 리드
Non-Repeatable Read와 유사하지만 한 트랜잭션이 실행중일 때 다른 트랜잭션에 의해 값이 수정된경우 아직 커밋되지 않은 행의 데이터를 읽을 수 있을 때 발생
지속성(Durability)
- 트랜잭션이 성공적으로 완료되었으면, 결과는 영구적으로 반영되어야함
- 반영외에도 복구 및 체크섬,롤백등을 제공함
무결성
무결성이란 데이터의 정확성과 일관성 그리고 유효성을 유지하여야하는 것을 말하며 무결성이 유지되어야 데이터 베이스에 저장된 값과 실제값이 일치하는지에 대한 신뢰
개체 무결성
- 기본키는 널값을 허용하지 않는다.
참조 무결성
- 참조 관계에 있는 두테이블의 데이터는 유지되어야함
고유 무결성
- 특정 속성에 대해 고유한 값을 가지도록 조건이 주어진 경우 그 속성값은 모두 고유한 값을 가진다.
NULL 무결성
- 특정 속성값에 NULL이 올 수없다는 조건이 주어진경우 NULL로 값이 채워져서는 안된다.
데이터 베이스의 종류
RDBMS 관게형 데이터베이스는 기존 데이터베이스의 `관계형`이라는 키워드가 붙으며 RDB(관계형 데이터베이스)를 관리하는 시스템입니다.
관계형 데이터베이스의 특징
> 2차원 형태의 Table이라는 구조를 띄며 이 테이블들은 행(row)과 열(column)으로 이루어져 있습니다. 관계형 데이터베이스는 타 테이블과 관계를 맺는 집합체 특성을 가지며, 이러한 테이블들의 관계(relationship)를 종속적으로 나타냅니다. 종속적인 관계는 외래 키(foreign key)를 통해 표현됩니다. >
관계형 데이터베이스의 장점과 한계
장점
- 테이블에 따라 데이터를 저장하므로 명확한 데이터 구조를 보장하여 신뢰도가 높고, 그 때문에 데이터의 무결성이 보장됨
- 데이터의 일관성을 보장
- 데이터의 분류 / 정렬 / 탐색 작업에 대한 속도가 빠르다.
- 파일 기반의 저장방법보다 보안체계가 강력하다.
한계
- 스키마에 준수하지 않는 레코드를 추가할 수 없고, 추가적인 컬럼을 삽입하기 위해 테이블의 변경 또는 새로운 테이블생성이 필요
- 관계를 맺고 있기 때문에, JOIN문이 많은 매우 복잡한 쿼리가 만들어 질 수 있다
- 수평적 확장이 어렵고, 대체로 수직적 확장만 가능하다.(즉 처리의 한계를 직면하게됨)
- 대량의 데이터를 입력할 경우나 조회할 경우 성능이 저하 될 수 있고 Sharding과 Replication을 구축하는 비용이 많이 든다
NOSQL Not Only Sql, RDB형태의 데이터 베이스가 아닌 다른 형태의 데이터 저장 기술로, RDBMS와는 달리 테이블 간의 관계를 정의하지 않습니다. 그렇기 때문에 RDB의 특징 중 하나인 타 테이블과의 join 작업도 일반적으로 불가합니다. 빅 데이터의 등장으로 인해 데이터와 트래픽이 기하급수적으로 증가함에 따라 RDBMS에 단점인 성능을 향상시키기 위해 증가
NOSQL의 특징
- Key-Value 형태로 저장
- 데이터가 Key와 Value의 쌍으로 저장 - Key 값은 어떠한 형태의 데이터도 저장이가능. jpg,mp4도 가능하다. - 속도가 빠르며, Redis,Riak,Amazon Dynamo DB등이 존재
- Document Database
- Key-Value 형태와 유사하지만 Document로 저장된다는점에 차이가 있다. - Document는 하나의 객체단위로 취급되며, 계층적인 형태를 띈다. - 다만, 기존 SQL과는 다른 쿼리를 사용 - 대표적인 NOSQL Document model로는 MongoDB,CouthDB등이 있다.
- 데이터의 조회 작업이 기반이 되는 상황에 따라 DB를 선택해야된다.
- 만약 상세한 조회가 필요로 되는 작업의 경우 RDBMS를 선택해야한다. - 많은 데이터 속 필터링의 정보가 적다면 NoSql을 선택해야한다.