정규화
·
독서/데이터베이스
Every entity in your database needs to have a single theme - Edgar F. Codd 정규화는 함수적 종속성의 특징에 따라 테이블을 분리해 나가 데이터 구조의 안정성을 최대화시키고, 중복을 배제하여 삽입, 삭제, 갱신 이상의 발생을 방지한다. 따라서 모든 Entity는 하나의 주제로 구성되도록 구성되어야 한다. 제1 정규형 (1NF) 릴레이션에 속한 모든 도메인은 원자성을 가진다. 하지만 원자성이란 모호함을 구분하기 위해 크리스토퍼 데이트는 다음과 같은 1 정규형의 정의를 가진다. 열에는 위-아래의 순서가 없다. 행에는 좌-우의 순서가 없다. 중복되는 열이 없다. 모든 열과 행의 중복지점에는 (열과 행의) 해당되는 분야에서 한 개의 값을 가진다. 모든 행은..
함수적 종속성
·
독서/데이터베이스
정규화란 개념적 스키마 구조에서 보다 효율적인 스키마 구조를 만들기 위한 규칙이다. 정규화는 함수적 종속성을 기본으로 하기 때문에 정규화 학습 전에 함수적 종속성을 이해할 필요가 있다. 이상(Anomaly) 이상 현상이란 개념적 설계 단계에서 스키마 구조를 정제한 과정 없이 바로 구축해 사용한다면 여러 문제가 발생하게 되는데 이것을 이상 현상이라고 한다. 즉, 데이터 중복으로 인해 테이블 조작 시 예상하지 못한 현상이 발생하는데 그 이유는 속성들 간에 존재하는 여러 종류의 종속 관계를 하나의 릴레이션에 표현했기 때문이다. 따라서 하나의 테이블에 표현된 관계성을 잘게 자를 필요가 있다. 삽입 이상 테이블 관계가 잘못 설계가 되어서 새로운 데이터가 삽입할 때 발생하는 이상 현상이다. 예를 들어 복합 키로 구..
SQL 메모 정리 [작성중]
·
독서/데이터베이스
SQL (Structured Query Language) 데이터베이스에서 데이터를 정의, 조작, 제어하기 위해 사용되는 언어로 크게 세 가지로 구분될 수 있다. 속성 설명 주요 명령어 DDL 데이터베이스, 테이블 등을 생성, 삭제 또는 구조 변경을 위한 명령어 CREATE, ALTER, DROP DML 데이터베이스의 데이터를 조회, 저장, 삭제, 수정하기 위한 명령어 INSERT, UPDATE, DELETE, SELECT 등 DCL 저장된 데이터를 관리하기 위하여 데이터의 보안성 및 무결성 등을 제어하기 위한 명령어 GRANT, REVOKE 등 관계형 데이터베이스란? 관계형 데이터베이스는 키와 값으로 이뤄진 테이블로 이루어져 있으며, 이처럼 데이터의 종속성을 관계로 표현하는 것을 의미한다. 일관된 테이블..
트랜잭션과 잠금
·
독서/데이터베이스
트랜잭션이란 작업의 완전성을 보장하는 것으로 하나의 트랜잭션에 일어나는 모든 변경은 완전히 성공하거나 완전히 실패하도록 만들어주는 기능이다. 이것은 하나의 작업에서 일부만 성공해 데이터가 변경이 일어난 경우를 막기 위함인데 만약 서로 다른 트랜잭션에 동일한 데이터에 접근할 경우에는 잠금이 필요하게 된다. 잠금이란 동시성을 제거하기 위한 기능으로 하나의 레코드 또는 테이블에서 다른 트랜잭션에 의해 작업 중인 데이터에 접근해 수정하려는 행위를 막기 위한 기능이다. 데이터는 일관성을 지켜 신뢰성을 얻어야 하기 때문에 이 두 개의 기능은 매우 중요하다고 할 수 있다. MySQL에서의 트랜잭션 MySQL에서 테이블 엔진에 따라 트랜잭션은 다르게 일어나는데 MyISAM 경우 부분 업데이트를 통해서 실패한 레코드만 ..
쿼리 작성 및 최적화
·
독서/데이터베이스
SELECT INSERT, UPDATE의 경우 레코드 단위로 작업을 하기 때문에 성능상 문제가 되는 경우가 별로 없지만, SELECT의 경우 여러 테이블로부터 데이터를 불러와 조합해서 처리하기 때문에 테이블을 어떻게 읽을 것인가에 많은 주의가 필요하다. 인덱스를 사용하기 위한 기본 규칙 인덱스는 B-Tree에 아무런 변환 없이 정렬된 상태로 저장되기 때문에 인덱스를 사용하려면 기본적으로 인덱스 된 칼럼의 값을 그대로 사용해야 한다. 만약 MD5() 함수와 같이 해시 값을 만들어 비교하는 경우 미리 계산된 값을 저장하도록 가상 칼럼(Virtual Column)을 추가하고 그 칼럼에 인덱스를 생성하거나 함수 기반의 인덱스를 사용해야 한다. 값을 변환하지 않는다는 규칙은 WHERE절에서 비교하는 두 값의 데이..
실행 계획 분석
·
독서/데이터베이스
이 글에 포함된 모든 내용은 Real MySQL 8.0을 학습하며 작성된 내용입니다. EXPLAIN 실행 계획 분석은 SQL이 어떻게 처리되면서 어떤 최적화를 수행하는지, 어떤 인덱스를 사용하는지 등의 정보를 통해 쿼리가 최상의 상태에서 수행되고 있는지 분석하는 단계이다. id 칼럼 id 칼럼에는 SELECT 문장에서 1개 이사의 하위 SELECT 문자을 구분한 단위 쿼리에 부여되는 식별자 값이다. 이때 하나의 SELECT 쿼리의 테이블을 조인하면 조인되는 테이블의 개수만큼 실행 계획 레코드가 출력되지만 같은 id 값이 부여된다. 조인이 아닌 서로 다른 3개의 단위 SELECT 쿼리로 구성된 경우 각각을 식별할 수 있는 번호로 매겨지게 된다. 이때 주의할 점은 매겨진 번호가 테이블의 접근 순서를 의미하는..