Data Analysis

SQL

[SQL] 데이터베이스 객체

Holy_Water 2022. 12. 27. 19:24

DB 객체는 데이터베이스를 구성하는 독립된 요소들을 말한다. 테이블, 뷰, 저장프로시저, 함수, 트리거, 인덱스 등이 있으며 각각 독립적으로 존재할수도, 다른 객체에 연관되어 존재할수도 있다.

 

테이블(Table)

실제 데이터가 저장되는 공간을 의미한다, 테이블은 표 형식처럼 컬럼과 그 컬럼에 각각 값이 들어간(없을수도 있음) ROW 형태의 레코드들로 구성된다.

DB에서 가장 기본이 되는 개체로 실제 우리가 데이터를 저장한다는 것은 그 데이터를 그룹핑으로 구별되게 잘 쪼개서 각각의 테이블 컬럼에 대응되게 순차적으로 넣는다는 의미이기도 하다.

따라서 DB를 사용한다는 것은 데이터를 테이블 단위로 잘 포장해서 넣고 그 포장된 데이터 중에서 내가 원하는 데이터를 다시 읽어올 수 있는 것이 테이블의 역할이다.

 

뷰(View)

실제 데이터를 가지고 있지 않은 가상의 논리 데이블을 이야기 한다.

우리가 DB에서 원하는 데이터를 가져올 때 여러 테이블에서 가져와야 할 필요가 있는데, 한 테이블이 항상 다른 테이블과 붙어서 가져와야 한다면, 가상으로 해당 테이블이 붙은 논리적인 테이블을 구성할 수도 있다.

예를 들면 A,B,C 테이블에서 데이터를 "A + B + C" 이런식으로 가져온다면 미리 "A + B + C" 대신 "D"를 사용하는 사람은 A,B,C 의 존재를 몰라도 되니 보안적인 측면에도 유리하다.

 

인덱스(Index)

인덱스는 테이블에 속해있는 객체로 데이블의 데이터의 일부를 색인화한 별도의 데이터 저장공간이다.

테이블안에 들어있는 데이터가 많다면, 각각의 레코드마다 일정의 저장공간을 차지할텐데, 그 많은 레코드중에서 내가 원하는 것들만 뽑아내야 한다면 하나의 레코드 공간만큼 옵티마이저는 점프하면서 비교하며 찾아낼 것이다.

레코드 정보가 많을 수록, 크기가 클수록 점프해야할 공간도 넓ㅅ어질텐데, 이건 데이터를 가져오는데 있어 많은 부담을 준다

따라서 레코드 정보 중 비교를 자주하는 정보만 별도로 빼서 따로 저장 공간을 만들고 원 테이블의 몇번째 있다 라는 정보만 별도로 가지고 있으면 옵티마이저는 별도공간에서 비교, 일치하는 것과 해당 테이블의 몇 번쨰 있다는 것을 알게되면 부담이 확 줄 것이다.

이게 인덱스의 역할이고 전화번호부 앞쪽의 색인같은 역할을 한다고 생각하면 된다.

 

함수(Funtion)

프로그램 언어에서 함수같은 것을 DB에서도 만들 수 있다. 공통적으로 많이 사용하는 것을 미리 만들어 모든 SQL문에서 호출해서 사용할 수 있게 해준다. 

DBMS 자체적으로 제공할 수도 있고, 필요에 따라 만들어 사용할 수도 있다.

 

저장프로시저(Stored Procedure)

개인적으로 DB에서 가장 많이 사용하는 객체이다. 일련의 SQL작업 모음이라고 할 수 있다. 즉 다양한 로직이 들어가야 하는 경우, 여러 SQL문으로 하나나 그 이상의 결과를 도출하고자 할 때 사용하는 객체로 절차적으로 위에서 부터 수행되기에 프로그램 요소가 매우 강한 객체이다.

SQL 자체는 집합개념으로 봐야 하는데, 저장 프로시저, 함수등은 절차적인과 같은 프로그램 요소가 들어가 있다.

 

트리거

트리거는 테이블에 감시를 달아놓은 저장 프로시저라고 할 수 있다.

저장프로시저의 경우는 사용자가 의도를 가지고 실행을 시켜야 작동이 되는데, 트리거는 의도가 아닌 테이블안의 데이터에 대한 변경이 있을떄, 즉 추가, 수정, 삭제 등의 변경시 작동하게 하는 일종의 테이블 Watching 프로시저 이다. 

따라서 프로시저와 같은 방법으로 로직을 만들고, 이것의 구동준비는 테이블 상태에 걸어둔 것으로 이것도 프로그램적 요소가 있는 것이다.