반응형
해당 글에서는 뷰 테이블(View Table)에 대해 이해하고 활용 방법에 대해 알아봅니다.
1) 뷰 테이블(View Table)
💡 뷰 테이블(View Table)
- 데이터베이스에서 테이블의 일부 또는 ‘특정 조건에 따라 필터링된 데이터만’을 포함하는 ‘가상 테이블’입니다.
- 실제로 데이터를 저장하지 않고 기존 테이블의 데이터를 기반으로 쿼리를 실행하여 필요한 정보를 반환합니다.
- 이를 통해 데이터의 일부분에 집중하거나 복잡한 쿼리를 간소화할 수 있습니다.
- 데이터의 보안, 효율성 및 유지보수 측면에서 유용하게 사용될 수 있습니다.
1. SQL문으로 사용하는 것과 뷰 테이블을 사용하는 것 중에 무엇이 더 이점이 있을까?
💡 결론적으로 두 가지 방법에 대해서 각각의 장단점이 있습니다.
- 각각의 장단점은 아래를 확인하시면 됩니다.
- 따라서, SQL문을 바로 사용하는 것은 유연성과 자유도가 높지만, 반복적인 작업이나 복잡한 쿼리의 경우 View Table을 사용하는 것이 효율적일 수 있습니다.
2. 뷰 테이블의 장점
💡 뷰 테이블의 장점에 대해서 확인해봅니다.
장점 | 설명 |
유연성 | - 다양한 데이터를 기반으로 ‘필요한 정보를 동적으로 생성’할 수 있습니다. |
효율성 | - 기존 테이블에서 데이터를 조합하거나 필터링하여 ‘필요한 정보에 빠르게 접근’할 수 있습니다. |
보안 | - ‘기존 테이블에 대한 접근 권한’을 제한할 수 있어 데이터 보안을 강화할 수 있습니다. |
간결성 | - 사용하면 ‘복잡한 쿼리를 단순화’할 수 있으며 ‘중복된 코드를 줄여서 유지보수를 용이’하게 할 수 있습니다. |
가독성 | - 사용하면 데이터 모델을 더 ‘직관적이고 읽기 쉽게’ 만들 수 있습니다. |
재사용성 | - 다른 쿼리나 뷰에서 ‘재사용’할 수 있어 개발 생산성을 향상시킵니다. |
표준화 | - ‘데이터 모델의 일관성과 표준화’를 유지할 수 있도록 도와줍니다. |
성능 최적화 | - ‘복잡한 연산을 최적화’하여 데이터 접근과 처리 속도를 향상시킬 수 있습니다. |
유지보수성 | - 사용하면 데이터 모델이 변경되더라도 응용 프로그램을 수정할 필요 없이 기존 뷰를 업데이트할 수 있어 유지보수가 용이합니다. |
통합성 | - 사용하면 여러 테이블에서 필요한 정보를 한 곳에 ‘통합하여 관리’할 수 있습니다. |
3. 뷰 테이블의 단점
💡 뷰 테이블의 단점에 대해서 확인해 봅니다.
단점 | 설명 |
성능 저하 | - 실제 데이터를 기반으로 ‘동적으로 생성’되기 때문에 쿼리 실행 시 ‘추가적인 계산이 필요’하며, 이로 인해 성능이 저하될 수 있습니다. |
업데이트 제약 | - 기존 테이블의 데이터를 참조하기 때문에 기존 테이블의 구조나 데이터 변경 시 뷰 테이블을 업데이트하는 작업이 필요합니다. |
데이터 일관성 | - 기존 테이블의 데이터를 참조하므로, 기존 테이블의 데이터가 변경되면 뷰 테이블과의 일관성을 유지하기 위해 추가 작업이 필요합니다. |
제약 조건 | - 기본 테이블의 제약 조건을 상속하지 않기 때문에 별도로 제약 조건을 정의해야 합니다. |
업데이트 제한 | - 일부 뷰 테이블은 특정 조건을 만족하지 않는 데이터를 수정할 수 없습니다. |
4. 뷰 테이블의 고려 사항
💡 뷰 테이블을 사용하는 경우 ‘성능적인 측면’에서 몇 가지 고려해야 할 사항이 있습니다.
1. 뷰 테이블을 생성할 때에는 기본 테이블의 데이터를 조회하여 ‘새로운 가상 테이블을 생성하는 작업’이 수행됩니다.
- 이 작업은 시간과 리소스를 소모할 수 있으며, 뷰 테이블에 대한 쿼리가 실행될 때마다 해당 작업이 반복됩니다.
- 따라서 뷰 테이블을 자주 사용하거나 대용량의 데이터를 처리해야 할 경우, 뷰 테이블 생성 및 조회 작업에 대한 성능 저하가 발생할 수 있습니다.
2. 뷰 테이블은 기본 테이블과 조인하여 데이터를 가져오는 작업이 필요한 경우가 많습니다. 이 경우, 뷰 테이블과 기본 테이블 사이의 조인 작업이 수행되어야 합니다.
- 조인 작업은 데이터베이스의 성능에 영향을 줄 수 있는 복잡한 작업 중 하나입니다.
- 따라서 조인 작업을 최적화하고 인덱스를 적절하게 사용하여 성능을 향상하는 것이 중요합니다. 잘못된 조인 작업이나 부적절한 인덱스 사용은 성능 저하를 초래할 수 있습니다.
3. 뷰 테이블은 기본 테이블의 데이터가 변경되면 그에 따라 업데이트되어야 합니다.
- 뷰 테이블을 사용하는 경우, 기본 테이블의 데이터 변경에 따라 뷰 테이블도 업데이트되어야 합니다. 이는 성능상의 부담을 초래할 수 있으며, 데이터의 일관성을 유지하기 위해 추가적인 작업이 필요합니다.
2) 뷰 테이블(View Table) 구조
1. 뷰 테이블 생성
💡 뷰 테이블 생성 기본구조
- CREATE VIEW [뷰 테이블 명] AS [쿼리] 형태로 뷰 테이블을 생성합니다.
1. view_name은 생성할 뷰 테이블의 이름을 의미합니다.
2. column1, column2,... 은 선택적으로 포함할 열을 의미합니다.
3. table_name은 뷰 테이블을 생성할 기본 테이블의 이름을 의미합니다. condition은 선택 사항으로 특정 조건에 맞는 행만을 포함함을 의미합니다.
# 뷰 테이블 생성
CREATE VIEW view_name AS
SELECT column1, column2, ...
FROM table_name
WHERE condition;
2. 뷰 테이블 수정
💡 뷰 테이블 수정 기본구조
- CREATE OR REPLACE VIEW [뷰 테이블 명] AS [쿼리] 형태로 뷰 테이블을 ‘수정’합니다.
1. view_name은 수정할 뷰 테이블의 이름을 의미합니다
2. column1, column2,... 은 선택적으로 포함할 열을 의미합니다.
3. table_name은 뷰 테이블을 생성할 기본 테이블의 이름을 의미합니다. 4. condition은 선택 사항으로 특정 조건에 맞는 행만을 포함함을 의미합니다.
# 뷰 테이블 수정
CREATE OR REPLACE VIEW view_name AS
SELECT column1, column2, ...
FROM table_name
WHERE condition;
3. 뷰 테이블 이름 변경
💡 뷰 테이블 이름 변경 기본구조
- ALTER VIEW [현재 뷰 테이블명] RENAME TO [변경할 뷰 테이블명] ; 형태로 뷰 테이블의 이름을 변경합니다.
ALTER VIEW customer_master RENAME TO customer_info;
4. 뷰 테이블 삭제
💡 뷰 테이블 삭제 기본구조
- DROP VIEW [ IF EXISTS ] [뷰 테이블 명] 형태로 뷰 테이블을 ‘삭제’합니다.
1. IF EXISITS는 뷰 테이블이 존재한다면 삭제하는 구문을 의미합니다.
DROP VIEW [ IF EXISTS ] view_name;
5. 스키마 내에 뷰 테이블 조회
💡 스키마 내에 뷰 테이블 조회
- 스키마 내에 생성된 뷰 테이블에 대해 조회 하는 방법입니다.
SELECT *
FROM information_schema.views
WHERE table_schema = 'public';
3) 뷰 테이블 생성 예시
💡 Dbeaver 툴을 이용하여 실제 테이블과 데이터를 구성하고 뷰 테이블을 생성해서 확인하는 부분을 예시로 확인합니다.
1. 뷰 테이블 데이터 구성
💡 각각의 테이블 1, 2, 3을 구성하고 각각의 값을 넣고 뷰 테이블을 구성합니다.
-- 샘플 테이블1을 구성합니다.
CREATE TABLE table1 (
id SERIAL PRIMARY KEY,
name VARCHAR(50)
);
-- 샘플 테이블2을 구성합니다.
CREATE TABLE table2 (
id SERIAL PRIMARY KEY,
city VARCHAR(50)
);
-- 샘플 테이블3을 구성합니다.
CREATE TABLE table3 (
id SERIAL PRIMARY KEY,
country VARCHAR(50)
);
-- 샘플 데이터의 값을 넣습니다.
INSERT INTO table1 (name) VALUES ('John');
INSERT INTO table1 (name) VALUES ('Emma');
INSERT INTO table1 (name) VALUES ('Michael');
INSERT INTO table2 (city) VALUES ('New York');
INSERT INTO table2 (city) VALUES ('Los Angeles');
INSERT INTO table2 (city) VALUES ('Chicago');
INSERT INTO table3 (country) VALUES ('United States');
INSERT INTO table3 (country) VALUES ('Canada');
INSERT INTO table3 (country) VALUES ('Mexico');
-- 뷰 테이블 구성합니다.
CREATE VIEW my_view AS
SELECT table1.name, table2.city, table3.country
FROM table1
JOIN table2 ON table1.id = table2.id
JOIN table3 ON table1.id = table3.id;
2. 데이터 확인
💡 뷰 테이블을 조회하여 데이터를 확인합니다.
-- 뷰 테이블을 조회합니다.
SELECT * FROM my_view;
3. 뷰 테이블 수정 및 컬럼 추가
💡 신규 테이블 4를 추가합니다.
-- 테이블 4의 구조
CREATE TABLE table4 (
id SERIAL PRIMARY KEY,
column VARCHAR(50)
);
-- Join the tables with the view table
SELECT my_view.name, my_view.city, my_view.country, table4.column
FROM my_view
JOIN table4 ON my_view.id = table4.id;
💡 뷰 테이블을 수정하여 컬럼을 추가합니다.
CREATE OR REPLACE VIEW my_view AS
SELECT table1.name, table2.city, table3.country, table1.id
FROM table1
JOIN table2 ON table1.id = table2.id
JOIN table3 ON table1.id = table3.id;
💡 뷰 테이블과 table4를 조인하여 결과를 확인합니다.
-- Join the tables with the view table
SELECT my_view.name, my_view.city, my_view.country, table4.item
FROM my_view
JOIN table4 ON my_view.id = table4.id;
오늘도 감사합니다. 😀
반응형
'DB > 이론 및 문법' 카테고리의 다른 글
[DB/mongo] Document DB 이해하기 -2 : MongoDB 및 Robo 3T 설치 및 사용예시 (0) | 2023.09.24 |
---|---|
[DB/mongo] Document DB 이해하기 -1 : MongoDB 이론 및 주요 메서드 (0) | 2023.09.24 |
[DB] 관계형 데이터베이스 키(Key) 이해하기 (0) | 2023.09.09 |
[DB/Postgres] PL/pgSQL 구성하기 -2 : DBeaver 기반 구축 및 활용 (0) | 2023.04.17 |
[DB/Postgres] 테이블 스캔 -1 : 전체, 인덱스(전체, 범위, 고유, 루스, 병합) 스캔 (2) | 2023.04.09 |