본문 바로가기

DB

정규화와 반정규화 제1정규화 📌 한 속성에 여러 개의 속성이 포함되어 있거나 같은 유형의 속성이 여러 개로 나눠져있는 경우 해당 속성을 분리정규화는 함수적 종속성을 근거로 합니다. 함수적 종속성(Functional Dependency)이란 데이터들이 어떤 기준값에 의해 종속되는 현상을 의미합니다. 이때 기준값을 '결정자'라고 하고 종속값을 '종속자'라고 합니다. 종속자는 함수 종속성을 갖게 되며 결정자에 의해 종속자가 결정되는 구조입니다.이름, 출생지, 주소는 주민등록번호에 대해 함수 종속성을 갖습니다. 여기서 이름, 출생지, 주소는 주민등록번호가 결정하기 때문에 '종속자'라고 볼 수 있고 주민등록번호는 이들을 결정하기 때문에 '결정자'라고 볼 수 있습니다. 회원정보아이디 나이 성별 회원구분 연락처 justin 33 남 .. 더보기
UML (Unified Modeling Language) UML (Unified Modeling Language) 통합 모델링 언어는 SW 공학에서 사용되는 표준화된 범용 모델링 언어 추상화된 시스템을 특정한 모델로 표현해 주는 언어를 의미 - UML을 사용하는 목적 (1) 의사소통 및 시스템 설계를 논의하기 위해 사용 (2) 전체 시스템의 구조 및 클래스의 의존성 관계를 쉽게 파악하기 위해 사용 (3) 시스템의 유지 보수를 위한 설계 등의 문서 제작을 위해 사용 UML의 '클래스 다이어그램'은 정적 다이어그램으로 클래스의 구성요소 및 클래스 간의 관계를 표현하는 대표적인 UML입니다. 시스템의 일부 혹은 전체 구조를 보여주며 의존 관계를 명확하게 보여줍니다. 클래스 다이어그램의 주된 목적은 클래스 간의 관계를 한눈에 보기 쉽게 만드는 것입니다. 따라서 클래스.. 더보기
컬럼의 Key속성 - FK와 MUL FOREIGN KEY 외래키 외래키는 두 테이블을 하나로 합칠 때 사용함 외래키는 다른 테이블의 기본키를 가리키는 칼럼에 설정되고 이 외래키로 인해서 두 테이블이 합쳐질 때 발생할 수 있는 오류를 방지할 수 있음 일반적인 테이블 사이의 관계인 1:N 관계에서는 1이 부모 테이블이고 N이 자식 테이블임 외래키 설정은 사실 테이블을 처음 생성할 때보다는 추가로 테이블이 만들어졌을 때, 외래키를 설정하는 경우가 더 많음 테이블의 칼럼수가 너무 많다거나 새로운 종류의 데이터의 입력이 필요한 경우 기존 테이블에 칼럼을 추가하는 것 보다 별도의 테이블을 만들어서 데이터를 추가해주고 기존 테이블과의 관련성을 유지하기 위해서 외래키를 사용 외래키 생성 후, 테이블을 보면 Key 칼럼에 MUL이라고 나옴. 이것은 Mul.. 더보기
[Redis] 1. AWS elasticache Redis 용도 : 주로 캐싱때문에 사용 추가로 DB로 사용, 랭킹 시스템?, 큐 시스템? AWS elasticache 를 이용하면 aws ec2와 연동해서 캐시를 쓰기 쉬움 (Redis를 ec2에 설치하는게 아님) 또 DB 안정성을 높일 수 있음 (GET REST API의 비중을 줄일 수 있음, 예로 아이디랑 비번 검증, 특정 API에 집중되는 현상) AWS elasticache를 왜 써야하나? 외부에서 API 요청이 정말 많아지면, RDS 서버는 다운이 될 수 있음 (그래서 aws RDS Aurora를 사용해서 자동으로 스토리지를 증설 할 수 있음) Redis를 도입하면 아래와 같이 아키텍쳐가 변경 됨 Redis 에 없는 데이터들만 rds로 요청이 들어가고 데이터를 뽑아오고, 이 데이터를 redis에.. 더보기
29. DB 파티셔닝, 샤딩, 레플리케이션 Partitioning DB 테이블을 더 작은 테이블들로 나누는 것 파티셔닝 종류 1. Vertical 파티셔닝 (=정규화+이외의 케이스) 2. Horizontal 파티셔닝 1. Vertical 파티셔닝 예시 article의 데이터 조회 시, row 에 있는 전체 데이터를 SSD나 HDD에서 읽어와 메모리에 올려놓고 필터링을 함 (테이블의 컬럼 개수가 많으면, IO에 대한 부담이 커짐) 때문에 아래와 같이 데이터 사이즈가 큰 content 컬럼 같은 경우는 오른쪽 그림과 같이 vertical 파티셔닝 하면 조회 성능 올라감 - 목적 : 조회 성능 개선 가능성, 민감정보 제한을 걸어 함부로 접근할수없게 하기 위해 2. Horizontal 파티셔닝 row를 기준으로 데이터를 나누는 방식 Sharding Ho.. 더보기
25. DB 인덱스 Index를 쓰는 이유 조건을 만족하는 튜플들을 빠르게 조회하기 위해! 빠르게 정렬 (order by) 하거나 그룹핑 (group by) 하기 위해! 아래 first_name에 index가 걸리지 않으면 full scan해서 시간 복잡도는 O(N) But first_name에 index를 걸면 시간 복잡도는 O(logN) 이 됨 index를 사용하면 아래와 같이 where 절 안에 있는 조건들을 빠르게 찾을 수 있다는 장점이 있음 또한 join 을 사용할 때, 명시하는 조건에 대해서도 빠르게 찾을 수 있음 Index 설정 방법 CREATE INDEX ON 쿼리로 인덱스 설정을 하면 그다음에는 인덱스가 설정된 컬럼을 WHERE 절에서 사용할 경우 자동으로 설정한 INDEX가 반영 또한 2개의 컬럼에 대해서.. 더보기
13.DB Trigger란 SQL에서 Trigger란? DB에서 어떤 이벤트가 발생했을 때, 자동적으로 실행되는 프로시저 (procedure) 데이터에 변경이 생겼을 때 (Ex: DB에 삽입,수정,삭제), 이것이 계기가 되어 자동적으로 실행되는 프로시저를 의미 SQL에서 예시 사용자의 닉네임 변경 이력을 저장하는 트리거를 작성해 보자 더보기
join을 이용하여 데이터 조회하기 SQL에게 Join 이란? 두개 이상의 table 들에 있는 데이터를 한번에 조회하는 것 여러 종류의 join이 존재 Implicit Join Where 절에 join condition을 명시하고, from 절에는 table 들만 나열 old style 단점 : where 절에 select 조건과 join 조건이 있어서 가독성 떨어지고 문법 오류 발생 가능 Explicit Join from 절에 Join 키워드와 함께 joined table 들을 명시하는 방식 Inner Join (Inner는 생략 가능) 두 테이블에서 join condition을 만족하는 tuple 들로 result table을 만드는 join join condition에 다양한 연산자 사용 가능 예시 dept_id와 departmen.. 더보기