본문 바로가기
관리자

Programming-[Backend]/SQL

(24)
[SQLD] 7. SQL 기본 3 - 데이터베이스 로그, TRUNCATE, Order by와 index 힌트, like문 underscore 1. 데이터베이스 로그 데이터 베이스는 트랜잭션이 발생하면 데이터베이스의 무결성을 확보하기 위해서 로그 파일을 남긴다. 트랜잭션이 일어나는 도중에 정전이나 예기치 못한 특별한 상황이 발생하여 시스템이 다운될수도 있다. 따라서 데이터베이스와 관련된 로그파일을 남겨두어 트랜잭션의 원자성이 깨진 부분 등을 복구할 수 있도록 한다. 다만 로그는 모든 정보를 남기는 것이 아니라, insert나 update 등 데이터의 변화가 생길 때만 기록을 남긴다. select 처럼 조회하는 부분은 로그 파일에 기록하지 않는다. MSSQL의 로그파일 관리(참조1) MSSQL은 3가지 타입의 로그파일을 남긴다. Primary Data File : 주 데이터 파일이며 데이터베이스의 나머지 파일들을 가리키고 있는 파일이다. 모든 데..
[SQLD] 6. SQL 기본 2 - CASCADE, 테이블-컬럼 변경, 뷰(VIEW) SQL 기본 문법에 대해서는 대부분 알고 있고, 문서로 읽고 기억하는 것보다는 실제로 SQL문을 작성 및 실행해보는 것이 훨씬 빠르고, 이해에도 유리하다고 생각한다. 이 글 뒤부터의 내용은 내가 실무에서 잘 사용 안 해본 내용 또는 이론적인 내용들만 요약하여 기록해놓는다. CASCADE 옵션 CASCADE에 대해서는 JPA를 학습할때 배웠는데, SQL 자체의 DDL 문법중 하나이다. 책에서 나오는 예시는 다음과 같다. //부서 DEPT 테이블 생성 Create Table DEPT ( deptno varchar2(4) primary key, deptname varchar2(20) ); INSERT INTO DEPT VALUES ('1000', '인사팀'); INSERT INTO DEPT VALUES ('1..
[SQLD] 5. SQL 기본 1 - 관계형 데이터베이스, 기본 용어, SQL 종류, 실행순서 1. 관계형 데이터베이스(Relation Databse)와 기본 용어 관계형 데이터베이스는 1970년대 E.F. Codd 박사의 논문에서 처음 소개된 데이터베이스이다. 테이블끼리 조인 연산을 하여 수학적 합집합, 교집합, 차집합 등의 개념을 도입한다. 데이터 베이스 종류 데이터 베이스의 종류에는 계층형, 네트워크형, 관계형 데이터베이스가 있다. 일반적인 데이터베이스는 관계형으로 릴레이션을 사용해서 집합, 관계 연산을 한다. 계층형 데이터베이스는 트리(Tree) 형태의 자료구조에 데이터를 저장하고 관리하며, 네트워크형 데이터베이스는 Owner와 Member 형태로 데이터를 저장한다. 계층형은 1대N의 구조, 네트워크형은 1대N 뿐만 아니라 M대N의 관계도 표현이 가능하다. -> 릴레이션은 행과 열의 관계를..
[SQLD] 4. 반정규화와 분산데이터베이스 반정규화(De-Normalization) 반정규화는 데이터베이스의 성능 향상을 위해서 데이터 중복을 허용하고 조인을 줄이는 방법이다. 반정규화 수행 시점 정규화에 따라 수행 속도가 느려지는 경우* 다량의 범위를 자주 처리해야하는 경우 특정 범위의 데이터만 자주 처리하는 경우 요약/집계 정보가 자주 요구되는 경우 반정규화는 클러스터링, 뷰, 인덱스 튜닝, 파티션 등 대안이 있는지 확인 후에 진행한다. *정규화를 수행하면 여러 테이블로 쪼개지고, 이에 따라 데이터를 조회할 때 조인을 사용해야한다. 조인은 단순한 코딩으로 치환하여 생각하면 이중 for문을 작성하는 것과 같다. 따라서 반정규화를하여 2개 테이블을 1개 테이블로 만들면 조인이 필요없게 되며 수행 속도의 향상이 있을 수 있다.** **하나의 테이블..
[SQLD] 3. 정규화 정규화(Normalization) 정규화는 데이터 중복을 제거하고, 데이터 모델의 독립성을 확보하기 위한 방법이다. 정규화를 수행하면 업무에 변화가 생겨도 데이터 모델의 변경을 최소화할 수 있다. 아래 Entity 도표처럼 만약 사원에 대한 정보와 부서에 대한 정보가 한번에 섞여있다고 가정해보자. 그럼 사원만 한 명 추가할려고해도 부서코드값과 부서명 등 부서와 관련된 정보를 null값이라도 강제로 넣어주어야한다. 이렇게 비즈니스에 필요한 엔터티와 상관없는 정보가 입력되는 것을 이상현상(Abnomaly)라고 한다. 정규화의 3단계 본래 정규화는 제1 정규화 - 제 5정규화까지 있지만 실질적으로는 제 3정규화까지만 진행한다. 정규화는 함수적 종속성을 기반으로한다. 즉 기본키(X)가 변할 때 컬럼값(Y)가 변..
[SQLD] 2. 엔터티, 속성, 관계, 식별자 엔터티(Entity) 엔터티는 업무를 추상화한 데이터 집합을 말한다. 참조1의 엔터티 도출 예제의 일부를 보자 -> 업무 시나리오 표현 ● (주)앙꼬래컨설팅에 입사하면 채용 시 개인정보를 기록한 간단한 이력서 외에도 자세한 개인정보를 기록할 수 있도록 인사기록 양식지를 배부한다. ● 입사한 모든 사원은 곧바로 부서에 배정된다. ● 인사기록 양식지에 크게 인사기본정보, 가족사항, 병역, 어학, 학력, 자격증정보, 해외경험내용, 경력 등을 기록해야 한다. ● 신입이든, 경력이든 입사한 모든 사람은 인사기록지에 위의 사항을 기록한다. ● 인사기본정보에는 한글이름, 영문이름, 주민등록번호, 집전화번호, 휴대폰번호, 전자메일, 본적주소, 현주소, 결혼여부를 기재한다. -> 엔터티 도출 (주)앙꼬래컨설팅, 가족관계..
[SQLD] 1. 데이터 모델링의 종류, 특징, ERD, 3 level schema 데이터 모델링의 이해 데이터 모델링 데이터 모델링은 현실 세계를 데이터(데이터베이스)로 표현하기 위해 추상화하는 것이다. 데이터 모델링은 고객의 비즈니스 프로세스를 이해하고 비즈니스 프로세스의 규칙을 정의한다. 정의된 비즈니스 규칙을 데이터 모델로 표현한다. 데이터 모델링의 특징 추상화(Abstraction) : 공통적인 특징을 찾고 간략하게 표현한다 단순화(Simplification) : 누구나 이해할 수 있게 표현한다 명확성(Clarity) : 한 가지의 의미를 갖고, 명확하게 해석할 수 있어야한다 데이터 모델링 단계 1. 개념적 모델링(Conceptual Data Modeling) - 계층형, 네트워크형 등의 모델 방식과 관계없이 업무 측면에서 모델링하며, 기술적 용어는 지양한다 - 엔터티와 속성을..
[TIL] 서브쿼리 - 여집합, 서브쿼리의 연결 고리 찾아서 해결 상황 여러 컬럼 중 한 컬럼의 특정값만 갖는 데이터를 구하고 싶은 상황이다. 예를 들어 아래 그림에서 code별로 address가 있는데, address가 150301이 없는 코드만 찾고 싶다면 어떻게 해야할까? 해결 방법 여집합 논리로 생각한다. 그리고 서브쿼리를 in절에 넣어서 해결한다. select distinct b.code from apple a inner join banana b on a.banana_id=b.id inner join cherry c on b.cherry_id = c.id where 1 = 1 and b.code not in ( select b.id from apple a inner join banana b on a.banana_id=b.id inner join cherry c..