/ LECTURE

SQL - VIEW / INDEX / SEQUENCE / DB Modeling

이 페이지는 다음에 대한 공부 기록입니다

JAVA(자바), Python(파이썬) 기반의

AI 활용 응용 소프트웨어 개발자 양성 과정

2021.11.10. ~ 2022.05.18.

찾으시는 정보가 있으시다면
주제별reference를 이용하시거나
우측 상단에 있는 검색기능을 이용해주세요

48일차 수업

View

현재 시점으로 SQL 데이터를 가상 테이블화 시켜 쿼리의 결과를 저장하는 기술

  • 물리적인 테이블을 근거한 논리적인 가상 테이블

실제 데이터가 하드웨어에 저장되는 것은 아님

  • 사용자가 해당 VIEW에 접근하면, VIEW에 들어있던 SQL이 수행되어 결과를 가져옴

  • 삭제할 때에도 마찬가지로 기본 테이블의 구조나 데이터에는 영향을 주지 않음

CREATE VIEW view_name
AS
SELECT column(s) FROM table WHERE condition;
-- SELECT 결과가 view_name 이라는 가상의 테이블에 저장됨

옵션

  • CREATE OR REPLACE VIEW : 같은 이름의 VIEW가 있을 경우 삭제 후 다시 생성

  • FORCE : 기본 테이블의 존재 여부에 상관없이 VIEW를 생성

  • WITH CHECK OPTION : 주어진 제약 조건에 맞는 데이터만 입력 및 수정을 허용

  • WITH READ ONLY : SELECT만 가능한 읽기 전용 뷰를 생성

장점

  • 복잡하고 긴 Query를 VIEW로 정의하면 접근을 단순화시킬 수 있다

  • 보안에 유리하다

종류

  Simple VIEW Complex VIEW
테이블 하나로 생성 여러 개로 생성
그룹 함수 사용 불가능 가능
DISTINCT 사용 불가능 가능
DML 사용 가능 불가능

CHECK

조건 컬럼 값을 변경하지 못하게 하는 옵션

VIEW를 정의하는 서브 쿼리문에 WHERE 절을 추가하여 기본 테이블 중 특정 조건에 만족하는 row만으로 구성된 뷰를 생성

조건에 사용 되어진 컬럼 값은 뷰를 통해서는 더이상 변경이 불가

CREATE OR REPLACE VIEW view_name
AS SELECT column(s)
FROM table
WHERE condition WITH CHECK OPTION;

WITH READ ONLY

기본 테이블의 어떤 컬럼에 대해서도 뷰를 통한 내용 수정을 불가능하게 만드는 옵션

CREATE OR REPLACE VIEW view_name
AS SELECT column(s)
FROM table
WHERE condition WITH READ ONLY;

INDEX

SQL 명령문 처리 속도를 향상시키기 위해서 컬럼에 대해서 생성하는 오라클 객체

내부 구조는 B-트리 형식으로 구성되어 있음

장점 : 빠른 검색 속도, 시스템 전체 성능 향상

단점 : 생성하는데 공간과 시간이 필요, 데이터 변경 작업이 자주 일어날 경우 오히려 성능 저하

종류

  • Unique Index : 유일한 값을 갖는 컬럼에 대해서만 인덱스를 설정할 수 있음

  • NonUnique Index : 중복된 데이터를 갖는 컬럼에 대해서 생성하는 인덱스

  • Single Index : 한 개의 컬럼으로 구성한 인덱스

  • Composite Index : 두 개 이상의 컬럼으로 구성한 인덱스

  • Function Based Index : 수식이나 함수를 적용하여 만든 인덱스

사용해야하는 경우

  • 테이블의 행의 수가 많을 때

  • WHERE condition에서 해당 컬럼이 많이 사용될 때

  • 검색 결과가 전체 데이터의 2~4%일 때

  • JOIN에 자주 사용되거나 NULL을 포함하는 컬럼이 많은 경우

사용하지 말아야하는 경우

  • 테이블에 행의 수가 적을 때

  • WHERE condition에 해당 컬럼이 자주 사용되지 않을 때

  • 검색 결과가 전체 데이터의 10%~15% 이상일 때

  • 테이블에 DML 작업이 많은 경우

관련 명령어

  • REBUILD : 인덱스를 재생성, 인덱스를 구성하는 B*트리에서는 인덱스 키에 의해서 일정한 정렬 순서를 유지하고 있기 때문에 새로운 노드가 추가되면 재구성되어야 함

  • INVISIBLE : 정말 필요한 인덱스인지 확인을 도와주는 명령어, 인덱스를 삭제하지 않고 비활성화시킨 후 점검을 거쳐 다른 SQL 문장에 영향이 없는지 확인 할 수있다

SEQUENCE

테이블 내의 유일한 숫자를 자동으로 생성하는 자동 번호 발생기

CREATE SEQUENCE sequence_name
START WITH n
-- 시퀀스 시작값을 지정
INCREMENT BY n
-- 연속적인 시퀀스 번호의 증가치 지정
MINVALUE n
-- 시퀀스가 가질 수 있는 최소값 지정
MAXVALUE n
-- 시퀀스가 가질 수 있는 최대값 지정
-- NOMINVALUE 또는 NOMAXVALUE를 지정하게 되면, 정렬 순서에 따라 1027승 or -1로 설정
CYCLE
-- 지정된 시퀀스 값이 최대값까지 증가가 완료되면, START WITH 부터 다시 시작
-- NOCYCLE를 지정할 경우 증가가 완료되면 에러를 유발 시킨다
CACHE n
-- 메모리상의 시퀀스 값을 관리하도록 하는 것, 기본값은 20, NOCACHE 원칙적으로 메모리 상에 시퀀스를 관리하지 않는다

CURRVAL

시퀀스의 현재 값을 알아내기 위해 사용

CURRVAL에 새로운 값을 할당받기 위해서는 NEXTVAL로 새로운 값을 생성해야 함

NEXTVAL

시퀀스의 다음 값을 알아내기 위해 사용

NEXTVAL, CURRVAL을 사용할 수 있는 경우

  • 서브쿼리가 아닌 SELECT문

  • INSERT문의 SELECT, VALUE 절

  • UPDATE문의 SET절

사용할 수 없는 경우

  • VIEW의 SELECT 절

  • DISTINCT, GOUP BY, HAVING, ORDER BY가 있는 SELECT 문

  • 서브쿼리

  • CREATE or ALTER TABLE 의 DEFAULT 값

SYNONYM

사용자가 다른 사용자의 객체를 참조할 때 가독성이 떨어지는 것을 해결하기 위해 사용하는 객체

비공개 동의어

  • 객체에 대한 접근 권한을 부여 받은 사용자가 정의한 동의어

공개 동의어

  • 권한을 주는 사용자가 정의한 동의어

  • DBA 권한을 가진 사용자만이 생성가능

  • SYNONYM앞에 PUBLIC을 붙여 정의

DB 모델링

방법론

정보 시스템을 개발할 때 정해진 방법과 절차에 의해 단계적으로 수행하는 작업

  • DFD : Data Flow Diagram, 구조론적 방법론

  • ERD : Entity Relationship Diagram, 정보공학 방법론

  • Class Diagram : 객체지향 방법론

필요성

  • 다수 개발자 간의 의사소통의 수단

  • 정보 시스템의 품질보증(QA) 수단

  • 생산성의 향상

  • 재사용의 가능성

  • 효과적인 프로젝트의 관리

  • 기술 수준의 향상

정보시스템의 개발 단계

  • 계획 : 세부 추진 일정 수립, 현업 담당자와 업무 회의

  • 자료 수집 계획 (요구분석 및 입출력 장표 수집)

  • 분석 : 장표와 업무회의 자료 등을 바탕으로 데이터 분석, 개념적 데이터 모델링 및 ERD 작성

  • 설계 : ERD를 기반으로 테이블 설계서 작성, 물리적 구조 설계, 화면 설계서 작성

  • 구축 : 테이블 설계서를 기반으로 테이블 생성, 화면설계서를 기반으로 코딩

개념적 모델링

요구사항이나 입출력 장표 등을 통해 수집된 기초 데이터를 도형과 기호로 체계적으로 모형화 하는 과정

목적

  • 사용자 요구사항에 대한 정확한 이해

  • 사용자, 설계자, 개발자 간의 의사소통의 수단

  • 고품질의 시스템과 유지보수 비용의 감소 효과

용어

  • Entity : 실체, 기업에서 지속적으로 저장하고 관리해야 할 대상

  • Attribute : 속성, 하나의 Entity가 구성하는 여러 개의 요소

  • UID : 식별자, 하나의 Entity를 구성하는 속성 중에서 해당 Entity를 대표하는 속성

  • Relationship : 관계, Entity 끼리의 상관관계

ERD 만드는 과정

사용자 요구사항에서 명사형 단어를 추출한다

  • Attribute가 없는 단어는 Entity가 될 수 없으므로 버린다

  • 같은 의미이지만 다르게 표현되는 단어는 하나로 정하고 버린다

Entity는 하나 이상의 Attribute를 가진다

Attribute는 여러 개의 구성 요소를 갖지 않는 명사를 의미한다

하나의 Entity는 반드시 하나의 UID를 갖는다

사용자 요구사항에서 동사형 단어들이 relationship이 될 수 있다

  • 1:1, 1:N, N:M 관계로 Entity와의 관계 형태를 표시한다

Normalization

정규화, 개념적 모델링 과정에서 정의된 각각의 Entity에서 데이터 중복성을 제거하고 새로운 Entity나 Attribute를 추가하는 단계

이유 : 개념적 모델링 작업을 거쳐 실세계의 내용을 분석한 결과가 제대로 되었는지 확인하기 위해

제 1 정규화

  • Entity 내의 모든 속성은 반드시 하나의 값을 가진다

제 2 정규화

  • Entity 내의 모든 속성은 반드시 UID에 종속되어야 한다

제 3 정규화

  • Entity 내의 UID를 제외한 모든 속성은 종속 관계를 가질 수 없다

정규화 작업은 6단계 이지만 일반적으로 3단계까지 수행, 과도한 정규화는 조회 성능을 저하시킬 수 있음

반 정규화

  • 성능 향상을 위해 정규화된 데이터 모델에서 중복, 통합, 분리 등을 수행하는 모든 과정

논리적 모델링

개념적 모델링 단계를 거친 ERD와 RDBMS를 매핑하는 단계

개념적 모델링 물리적 DB 설계
Entity TABLE
Attribute COLOMN
UID PRIMARY KEY
Relationship FOREIGN KEY