From 7d14bc20eb5c2fc603adb716494b0c77ce7af297 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B6=8C=EC=B1=84=EC=97=B0?= <102018765+chaeyeon0130@users.noreply.github.com> Date: Sat, 4 Jan 2025 22:15:13 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20[DB]=20View=20=EC=A0=95=EB=A6=AC=20(#7)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DB/View.md | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 DB/View.md diff --git a/DB/View.md b/DB/View.md new file mode 100644 index 0000000..6282748 --- /dev/null +++ b/DB/View.md @@ -0,0 +1,82 @@ +# View + +- DB에서 뷰는 하나 또는 그 이상의 테이블을 조인하여 만든 새로운 가상 테이블을 의미한다. +- 실제로 테이블을 생성한 건 아니지만, 사용자에게는 실존 테이블과 동일하게 사용된다. +- 뷰를 가지고 새로운 뷰를 만들 수도 있다. +- 이는 주로 특정 정보만 제공하고 싶은 경우나 복잡한 쿼리를 가상 테이블로 만들어 간편하게 활용할 수 있어 업무에서도 자주 이용하는 기능이다. + +예를 들면, + +두 개의 테이블이 있다고 가정하자. +`user`, `payment`. +개발자가 회원별 결제 이력을 조회하고 싶은데, 회사 규정상 민감한 개인정보는 제공하고 싶지 않은 경우 뷰를 만들어서 제공하면 된다. +user 테이블에 있는 민감한 개인정보가 담긴 컬럼을 제외하고 payment 테이블에도 카드 번호를 제외한 컬럼만 조인해서 뷰를 만들어 개발자가 해당 뷰를 접근하도록 하면 된다. + +# View 사용법 +예)

+`user` : id, name, email, phone_number

+`payment` : id, user_id, payment_date, amount, card_number + +
+ +```angular2html +# 뷰 네이밍 규칙 : 접두사 "v"를 붙인다. +CREATE VIEW v_user_payment AS +SELECT + u.id AS user_id, + u.name, + p.payment_date, + p.amount +FROM + user u +JOIN + payment p +ON + u.id = p.user_id; +``` +위와 같이, 민감한 정보(phone_number, card_number 등)를 제외하고, +`user`의 이름과 `payment`의 결제 내역만 포함한 뷰를 생성할 수 있다. + +
+ +```angular2html +DROP VIEW v_user_payment +``` +뷰를 삭제할 수 있고, + +
+ + +```angular2html +SELECT name, payment_date, amount +FROM v_user_payment +WHERE user_id = 1234; +``` +일반적으로 테이블을 `SELECT`하는 것과 동일하게 뷰를 조회할 수 있다. + +
+ +뷰를 읽기 전용으로 만들고 싶은 경우 쿼리 마지막에 `with read only`를 추가하면 된다. +그러면 `DML(INSERT, UPDATE, DELETE)`은 사용할 수 없기에 외부에 제공할 때 사용하기 좋은 옵션이다. +```angular2html +ALTER VIEW v_user_payment READ ONLY; + +or + +CREATE VIEW v_user_payment AS +/* query */ +WITH READ ONLY; +``` + +# View 장단점 +뷰의 장점 + +- 데이터 조회가 용이하다. (복잡한 쿼리를 단순화) +- 사용자별 필요한 정보만 제공할 수 있다. (보안 이점) +- 물리적인 공간을 차지하지 않는다. + +뷰의 단점 + +- 뷰에 인덱스를 구성할 수 없다. +- 뷰를 포함하여 뷰를 만든 경우 연관 뷰를 삭제하면 생성된 뷰도 삭제된다. +- 한번 정의된 뷰는 수정이 불가하다. \ No newline at end of file