db(8)
-
mysql dump 사용법
db를 사용하다 보면 실수를 했을 때 복원을 할 수 있는 db가 필요하다. 이럴 때 사용할 수 있는 방법이 mysql dump 방법이다. workbench 기준으로 dump 사용법을 알아보자. 먼저 스키마를 export 하는 방법 workbench에서 상단에 server에서 export를 누르면 다음과 같은 화면이 나온다. dump를 하고 싶은 스키마를 선택하도록 한다. 정상적으로 작동한다. export와 비슷하게 server에서 import를 누르면 다음과 같은 화면이 나온다. 경로를 선택해주고 new를 통해 스키마를 만들어주고 import를 받아준다. 정상적으로 작동하는 것을 알 수 있다.
2023.05.22 -
반정규화 정리
앞서 정규화에 대해서 글을 작성해봤다. 그렇다면 이러한 의문점이 든다. 정규화는 무조건 장점만 존재할까? 정규화는 릴레이션의 분리로 인해 조인이 많아져 질의에 대한 응답 시간이 느려지게 된다는 단점이 있다. 이러한 문제점을 해결할 수 있는 것이 반정규화다. 그렇다면 어떠한 경우에 반정규화를 해주면 좋을까? 반정규화를 수행하면 좋은 경우 1. 정규화를 통해 수행속도가 느려진 경우 2. 특정 범위의 데이터를 자주 조회하는 경우 3. 요약 / 집계 정보가 자주 요구되는 경우 그렇다면 반정규화 하는 방법은 어떤 것이 있을까? 1. 테이블 병합 조인되는 경우가 많아서 테이블을 합치는 것이 성능향상에 효율적인 경우에 사용 2. 테이블 분할 테이블에서 특정 속성들만 집중적으로 접근할 경우 분할하여 사용 1) 수직분할..
2023.01.10 -
데이터 무결성
데이터 무결성이란? 데이터 무결성은 데이터의 정확성, 일관성, 유효성이 유지되는 것을 의미한다. 데이터베이스의 상태를 일관되게 유지하는 것이 목적이다. 무결성 제약 조건의 종류 1. 개체 무결성 모든 테이블은 기본키를 가져야 한다. 기본키를 구성하는 속성은 not null과 unique해야 한다. 2. 참조 무결성 참조 관계 있는 두 테이블 A, B가 있을 때 A의 기본키를 외래키로 B가 가지고 있다고 할 때 A의 기본키와 B의 외래키가 동일해야한다. 3. 도메인 무결성 테이블에 존재하는 컬럼들의 데이터 타입을 맞추어준다. 4. null 무결성 테이블의 속성 값이 null이 될 수 없도록 제한한다.
2023.01.10 -
정규화 정리
정규화란? 관계형 데이터베이스의 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스라고 정의되어 있다. 정규화를 사용하는 목적 데이터베이스의 변경시 이상 현상 제거 1) 갱신 이상 : 만약 A.Bruchs의 부서를 변경할 때 4번째 행만 변경한다면 4번째 행과 5번째의 행의 부서가 달라지게 되므로 A.Bruchs의 부서가 어디에 속하는지 알 수 없다. 2) 삽입 이상 : 새로운 부서가 생겼을 때 아직 근무자 없다고 가정했을 때, 이 부서에 관련한 정보는 불필요한 정보를 함께 입력해야만 입력할 수 있다. 3) 삭제 이상 : Accounting 부서에 속한 사람이 한 명이라면 1행을 삭제하면 Accounting 부서에 대한 정보도 사라지게 된다. 제1 정규화 제1 정규화란 테이블의 칼럼이 원자값을 갖도록..
2023.01.10 -
인덱스 정리
인덱스란? 데이터베이스의 테이블에 대한 검색 속도를 향상시키는 자료구조 컬럼의 데이터를 정렬한 후 별도의 공간에 데이터의 물리적 주소와 함께 저장하는 것을 의미 컬럼의 값과 물리적 주소를 (key, value)의 한 쌍으로 저장 인덱스의 장단점 장점 : 테이블의 검색하는 속도가 향상된다. 단점 :인덱스를 관리하기 위해 작업공간이 필요하고, 삽입, 삭제, 수정 등이 자주 발생하면 검색 성능이 저하될 수 있다. 인덱스가 적용된 컬럼에 삽입, 삭제, 수정이 자주 발생하면 인덱스를 수정해줘야 되는데 인덱스는 제거되는 것이 아니라 사용하지 않음으로 남겨두기 때문에 인덱스가 과도하게 커질 수 있다. 인덱스를 활용하면 좋은 경우 1. 규모가 큰 테이블 2. 삽입, 수정, 삭제 작업이 자주 발생하지 않는 컬럼 3. w..
2022.12.21 -
트랜잭션 REQUIRES_NEW 옵션
상위 트랜잭션 @Service @RequiredArgsConstructor public class ParentService { private final JpaMemberRepository jpaMemberRepository; private final ChildService childService; @Transactional public void save(Member member) { System.out.println("parent 트랜잭션 시작"); jpaMemberRepository.save(member); childService.save(); } } 하위 트랜잭션 @Service @RequiredArgsConstructor public class ChildService { private final J..
2022.12.18