1. View
- 뷰 :: 하나 이상의 테이블을 합쳐 만든 가상 테이블 (실제로 저장 X)
- 특정 컬럼만 노출할 수 있는 보안성 기능이 있고 읽기 전용이 기본이다.
1.1. 뷰 생성하기
- 실습 : Book 테이블에서 축구라는 문구가 포함된 자료만 보여주는 뷰


- 뷰 생성문 예제 :: 세 테이블을 조인시켜서 주문 내역을 view로 생성해본다. 안 쓰고 조인 써도 되긴 함..


- 실습 : 주소에 대한민국을 포함하는 고객들로 구성된 뷰 생성 후 조회하는 실습

- 실습 : orders 테이블에서 고객이름과 도서이름을 바로 확인할 수 있는 뷰를 생성하고 김연아 고객이 구입한 도서의 주문번호, 도서이름, 주문액을 나타내기.

1.2. 뷰 수정/삭제하기
- 실습 : vw_customer 뷰에서 영국을 주소로 가진 고객을 보여주도록 뷰를 수정해보기
- CREATE VIEW 문에 OR REPLACE 명령을 더하면 수정된다.

- 실습 : vw_customer 뷰 삭제하기
- DROP VIEW 뷰이름 형식으로 뷰를 삭제할 수 있음. (뷰가 이미 drop으로 지워져서 밑에서 select이 안되는 모습!)

- 이외에도 INSERT, UPDATE, DELETE 문으로 뷰를 활용할 수 있음. (근데 기본적으로 읽기전용이라 DISTINCT, GROUP BY 제약이 없을 때만 변경이 가능하단 점 기억하자)
- 변경 불가능한 뷰 : 기본 테이블 기본키 구성 속성이 포함 안된 뷰는 절대 변경 불가능!!!
2. 인덱스
2.1. 인덱스와 B-Tree
- Index :: 데이터를 쉽고 빠르게 찾을 수 있도록 만든 데이터 구조
- B-Tree :: 데이터 검색 시간을 단축하기 위한 자료구조로, 비트리의 각 노드는 키 값과 포인터를 가지고 있음
- 일반적으로 RDBMS의 index는 대부분 B-Tree 구조로 구성됨
- 테이블에서 한 개 이상의 속성을 이용해 생성할 수 있고, 효율적 레코드 접근 및 적은 공간 차지라는 장점이 있다!'
2.2. MySQL 인덱스
- MySQL의 인덱스 = 인덱스 & 보조 인덱스 로 나뉨
- 클러스터 인덱스 :: 테이블 자체가 인덱스 구조고, 원래 기본키 생성하면 자동으로 생김
- 테이블당 하나만 존재하고 키값 정렬이 가능해 범위검색에 유리 (대신 변경/삽입에는 좀 약함)
- 보조 인덱스 :: 클러스터 인덱스가 아닌 인덱스로, 인덱스 키와 해당 레코드의 기본키값을 저장함
- 데이터 자체를 정렬하지 않고 테이블당 여러개를 만들 수 있음
- 인덱스 남발하면 검색 속도도 느려지고 저장공간도 낭비되니까 속성의 모든 값이 다 다를때, 여러개의 중복값이 없을 때 사용하는 것이 유리하므로 알아서 잘 판단하고 사용할 것!! (unique)

- 실습 : book 테이블의 bookname 열을 대상으로 인덱스 ix_book 을 생성하기

- 실습 : book 테이블의 publisher, price 열을 대상으로 인덱스 ix_book2를 생성하기

- 실습 : 대한미디어 출판사고 3000원 이상인 조건의 인덱스를 생성
- EXPLAIN :: SQL문 앞에 붙이면 실행계획이 표시된다!


- 실습 : book 테이블의 인덱스를 최적화하기
- B-Tree 인덱스같은 경우엔 수정/삭제/삽입이 자주 일어나면 노드 갱신이 주기적으로 발생 -> 단편화 현상이 나타나므로, ANALYZE (TABLE) 명령어를 통해 인덱스를 다시 재구성하고 생성해주자.


2. 함수와 프로시져
- 프로시져 : 선언부와 실행부(begin - end)로 구성되며, 매개변수를 이용해 저장 프로시져가 호출될 때 그 프로시저에 값을 전달함.
- 여러 SQL문 묶음, 단순 반복업무에 권장

- DELIMITER 실습 :: 뒤에 오는 기호는 마음대로 정해도 됨. 구문의 종료 기호를 설정하는 명령어!

- 트리거 :: 테이블에 대해 특정 동작(insert, update, delete)이 수행될 때 자동으로 실행되는 저장된 프로그램
- 특정 이벤트 발생할 때 자동 실행 (다만 예측 불가능한 성능 저하 문제 존재)
- person 테이블에 새로운 행 삽입될 때 같은 이름이 이미 존재하면 로그 테이블에 기록하는 트리거 실습


- 실습 : 테이블의 이름을 부르는 함수를 생성하고 두번째 값을 호출해보자.
- 사용자 정의 함수를 사용해서 기본 제공 함수로 해결하기 힘든 로직을 등록해 캡슐화할 수도 있음.




+) 함수는 information 스키마에 저장됨
3. JDBC 기본
- JDB를 설치하고 이클립스와 연동한다

- Vscode를 사용해보고 싶었어서 vscode로 JDBC를 연동해보았다.

- 아래처럼 JAVA PROJECTS 부분에 referenced libaries에 + 버튼을 눌러서 설치한 jdbc 드라이버를 연동할 수 있었다.
4. DAO, DTO, SOLID 기본개념
- DAO (Data Access Object) :: DB 데이터에 접근하기 위한 전용 객체 / 비즈니스 로직과 DB 연동 로직 분리를 위해 사용
- DTO (Data Transfer Object) :: 계층 간 데이터를 교환 위한 객체 / 별도의 로직 없이 데이터(getter/setter)만 포함
- SOLID 원칙 ::
- 단일 책임 원칙(SRP)
- 개방-폐쇄 원칙(OCP)
- 리스코프 치환 원칙(LSP)
- 인터페이스 분리 원칙(ISP)
- 의존 역전 원칙(DIP)
'Develop > DataBase' 카테고리의 다른 글
| [DataBase] "EZPC" 개발 프로젝트 후기 (1) | 2026.06.06 |
|---|---|
| [5주차] SQL 고급 쿼리 (0) | 2026.04.04 |
| [4주차] SQL 기초 (JOIN, CREATE, ALTER, DROP) (0) | 2026.03.28 |
| [3주차] SQL 기초 (SELECT문) (0) | 2026.03.21 |
| [2주차] 관계 데이터 모델 (DBMS) (0) | 2026.03.14 |