728x90
RDBMS (정확한 데이터 구조 / 명확한 스키마가 중요할때)
- 관계형데이터베이스 관리 시스템으로 관계형 모델을 기반으로 모든 데이터를 테이블 형태로 표현하는 데이터 베이스 → 관계를 나타내기 위해서 사용하는 키가 외래 키(FK) → 이 외래키로 테이블 간 Join이 가능함
- 정해진 스키마가 있어서 명확한 데이터 구조및 중복없이 저장 가능
- 테이블간 관계가 있어서 시스템이 커질 경우에는 Join이 많아질 수 있어서 복잡한 쿼리가 만들어질 수 있고, 성능이슈가 있을 수 있다. → Scale-up을 통해 해결하면 되지만. 비용이 만만치 않다.
NoSQL (정확한 데이터 구조를 알 수 없고 / 데이터 변경 및 확장이 될 수 있을 때)
- RDB형태의 관계형이 아니라 다른 형태의 데이터를 저장할 수 있는 기술로 관계를 저장하지 않음 데이터와 트래픽이 증가함에 따라서 비용 부담을 줄이고 여러 대의 데이터에 분산하여 저장하기 위함
- Key-Value
- Document (Key, Document)
- 스키마가 없어서, 유연한 데이터구조로 언제든지 새로운 필드 추가가 가능 단, 명확한 데이터 구조를 보장하지 않으며, 중복된 데이터가 존재할 수 있음
데이터 베이스 정규화
- 불필요한 중복데이터를 제거한다.
- 테이블의 구성이 논리적이고 직관적이기 위해서
1차 정규화
- 각 로우마다 컬럼의 값이 1개만 있도록 한다.(원자성)
2차 정규화
- 테이블의 모든 컬럼이 완전 함수적 종속
- 기본키중에 특정 컬럼에만 종속된 컬럼 (부분적 종속)이 없어야 한다
3차 정규화
- 기본키 이외의 다른 컬럼이 그외 다른 컬럼을 결정할 수 없는 것
- 이행적 함수 종속이 없다.
스토어드 프로시저(저장 프로시저 SP)
- DB 내부에 저장된 일련의 SQL 명령문들을 하나의 함수처럼 실행하기 위한 쿼리의 집합
- SP는 최초 실행될 때 최적화된 상태로 컴파일이 되고 이후에 DB에 캐쉬되어 저장된다. 캐쉬에 저장되면 최적화와 컴파일 작업을 다시 하지 않는다. 따라서 하나의 SP가 여러 번 쓰 일 때 성능에 향상이 있다.
- 네트워크 트래픽 감소와 보안측면에서 이점이 있음 ← 외부에서 접근 하지 않고 내부 로직으로 처리 하기때문
트리거(Trigger)
- 테이블에서 이벤트가 발생했을 때 자동으로 실행되는 작업
- 예를들면 테이블에서 insert, delete, update 등이 이루어졌을 때 그 변경점을 history 테이블이 구축되어있다 라고 한다면, 해당 테이블에 어떤 이벤트가 발생했는지에 대한 데이터를 저장 시켜줄 수 있음
뷰(View)
- 사용자에게 접근이 허용된 자료만을 제한적으로 보여주기 위해 하나 이상의 기본 테이블로부터 유도된, 이름을 가지는 가상 테이블
- 저장장치 내에 물리적으로 존재하지 않으며, 삽입,삭제,갱신 연산에 제약된다.
인덱스(Index)
- 추가적인 쓰기 작업과 저장 공간을 활용해서 데이터 베이스 테이블의 검색 속도를 향상시키기 위한 자료구조
- 책의 목차 라고 생각하면 될 것 같음 데이터 베이스 레코드를 처음부터 다 스캔하는게 아니라 B+ Tree로 구성된 구조에서 Index 파일 검색으로 속도를 향상 시킴
- 데이터 변경이 자주 일어나는 경우에는 Index를 재작성 해야해서 성능에 영향을 미침
- 인덱스 지정시 인덱스 테이블이 지정
클러스티드 인덱스와 넌 클러스티드 인덱스의 차이
- 클러스터 인덱스는 데이터 위치를 바로 알기 때문에 그 데이터로 바로 접근할 수 있고, 넌 클러스터 인덱스는 인덱스 페이지를 한번 거쳐서 데이터에 접근하는 방식이다.
기본키(PK)
- 테이블의 식별자 역할을 함, 중복안되고, NULL 안됨, 테이블에 한개만 설정 가능
유니크키(UK)
- 테이블 내 항상 유일해야 하는 값, 중복 안되지만 NULL가능
외래키(FK)
- 테이블내 열 중에서 다른 테이블의 기본키를 참조 함
개체 무결성(entity integrity)
- 기본키로 사용하는 속성은 null 값을 가질 수 없다.
참조 무결성(referential integrity)
- 릴레이션은 참조할 수 없는 외래키의 값을 가져서는 안 되는데, 참조할 수 없는 외래키란 null이 아니면서 참조된 릴레이션의 어떤 기본키의 값과도 일치하지 않음을 의미한다.
반응형
'DataBase > RDBMS' 카테고리의 다른 글
Cannot add or update a child row: a foreign key constraint fails (0) | 2022.03.03 |
---|