Computer Science/Database, SQL

[HUFS/데이터베이스] #11 View & Embedded SQL

성중 2021. 10. 13. 21:39

SQL 뷰(view)

  • 기존 테이블에서 유도되어 만들어지는 가상 테이블(virtual table)외부 스키마를 구성한다
  • 물리적 구현X, 카탈로그에 SELECT-FROM-WHERE 형태 SQL문으로만 저장된다
  • 테이블을 들여다보는 창문 역할이기에 뷰를 변경하면 테이블도 변경된다

 

SELECT 문을 활용한 뷰의 생성 및 예시

이렇게 생성된 뷰는 마치 테이블처럼 활용할 수 있으며 기존 테이블로 치환이 가능하다

 

column의 이름을 임의로 보기 좋게 만들거나 2개 이상의 테이블을 조인하는 뷰를 만들 수 있다

뷰의 제거는 DROP VIEW를 하면 되는데,,

 

RESTRICT / CASCADE 옵션이 있다!
뷰에 삽입/삭제/갱신은 기본키(Sno)를 포함하는 경우에만 가능
조인되어 만들어졌거나 통계적 요약을 포함하는 경우 불가능

다만 기본키를 포함하는 경우에도 이론상 변경이 가능할 뿐, 다음과 같은 경우에는 불가능

  • 상수나 연산자, 함수가 포함된 산술 식으로 뷰의 열이 구성된 경우
  • DINSTINCT나 GROUP BY, HAVING이 사용된 경우
  • 두 개 이상의 테이블이 관련된 경우
  • 변경할 수 없는 뷰를 기초로 정의된 경우

 

뷰의 장점

  • 확장, 구조 변경이 가능한 논리적 독립성을 제공
  • 보안을 위한 데이터 접근 제어
  • 사용자 데이터 관리 단순화
  • 여러 사용자의 다양한 데이터 요구를 맞춤형 제공

 

뷰의 단점

  • 정의 변경 불가
  • 삽입, 삭제, 갱신 연산에 제한이 많음

 

삽입(Embedded) SQL

티미널에서 대화식으로 사용하는 SQL문을 DB응용 프로그램으로 옮겨 사용 가능

즉 삽입되어 사용되는 SQL은 앞에 EXEC SQL을 붙여 구분되며 호스트의 실행문에 사용 가능

 

C언어 기반 DB 응용 프로그램에 SQL을 사용하는 예시 (‘:’을 붙인 변수는 C변수)
host 변수를 활용한 연산 및 바인딩1
host 변수를 활용한 연산 및 바인딩2

결과값이 집합(테이블)으로 나올 경우 응용 프로그램에선 표시가 불가능하기 때문에

커서(cursor)활동 세트(active set)의 레코드들을 가리키는 형식으로 정의된다

 

DECLARE(정의) -> OPEN(활성화) -> FETCH(host 변수에 값 복사) ~ DO-END 반복 -> CLOSE
이후 원하는 host 변수로 값을 변경하거나 삭제

Dynamic SQL을 통해 문자열 형태로 동적으로 SQL을 조작할 수 있다

 

문자열을 host 변수로 저장하고 실행
매개변수(?)를 넣어 내부에 host 변수를 활용해 모든 종류의 SQL 문을 실행한다

요즘은 ODBC라는 표준 C API로 응용프로그램이 모든 종류의 DB에 접근할 수 있다

Java는 JDBC를 거쳐 해당 C 라이브러리들을 거쳐 접근하는 방식을 취한다