Skip to content

데이터베이스 객체 #

Find similar titles

19회 업데이트 됨.

Edit
  • 최초 작성자
    이크스
  • 최근 업데이트
    hyewonlee

데이터베이스 객체란 #

  • 데이터베이스 객체데이터베이스 내에 존재하는 논리적인 저장 구조를 말한다. 오라클과 같은 DBMS가 데이터를 관리하려면 데이터를 어딘가에 저장해 관리해야 하는데, 이런 목적을 달성하기 위해 필요한 모든 논리적인 저장 구조가 데이터베이스 객체다.

데이터베이스 객체의 종류 #

  1. 테이블 : 데이터를 담고 있는 객체
  2. 뷰 : 하나 이상의 테이블을 연결해 마치 테이블인 것처럼 사용하는 객체
  3. 인덱스 : 테이블에 있는 데이터를 빠르게 찾기 위한 객체
  4. 시노님 : 데이터베이스 객체에 대한 별칭을 부여하한 객체
  5. 시퀀스 : 일련번호 채번을 할 때 사용되는 객체
  6. 함수 : 특정 연산을 하고 값을 반환하는 객체
  7. 프로시저 : 함수와 비슷하지만 값을 반환하지 는 않는 객체
  8. 패키지 : 용도에 맞게 함수나 프로시저를 하나로 묶어 놓은 객체

테이블 #

  • 데이터를 넣고 수정하고 삭제하는, 즉 데이터를 담고 있는 객체가 테이블이다. 테이블은 DBMS상에서 가장 기본적인 객체로 로우(행)와 컬럼(열)으로 구성된 2차원 형태(표)의 객체로 우리가 자주사용하는 엑셀과 구조가 같다고 보면 이해하기 쉽다. SQL을 이용해 데이터를 조회, 삭제 , 입력, 수정할 대상이며 그 결과를 담고 있는 것이 바로 테이블이다. 데이터가 저장되는 객체이므로 테이블을 어떤 형태로 구성해 만들 것인지 정하는 것, 즉 테이블 설계 작업은 데이터베이스를 사용할 때 가장 기초적이고 중요한 단계에 속한다.

테이블 생성 #

  • 테이블을 CREATE 문으로 생성할 수 있는데, 기본 구문은 다음과 같다.

    CREATE TABLE [스키마.]테이블명(
        컬럼1 컬럼1_데이터타입 [NULL, NOT NULL],
        컬럼2 컬럼2_데이터타입 [NULL, NOT NULL],
       ....
    )[TABLESPACE 테이블스페이스명];
    
  • 테이블은 로우와 컬럼으로 구성되므로, 테이블 생성은 컬럼단위로 정의한다. 스키마명은 생략이 가능하며 생략하게되면 현재 자신이 로그인한 스키마 이름으로 생성된다. 또한 TABLESPACE구문도 생략이 가능한데, 생략하면 해당 사용자의 디폴트 TABLESPACE에 생성된다.

데이터 타입 #
  • 데이터 타입이란 컬럼이 저장되는 데이터 유형을 말하며, 오라클에서는 기본으로 제공되는 기본 데이터 타입(원시데이터 타입이라고도함)과 사용자 정의 데이터 타입으로 구분할 수 있다. 사용자 정의 타입이란 사용자가 직접 기본 데이터 타입을 혼합해 만들수 있는 타입이다.
문자 데이터 타입 #
  • 문자나 문자열 데이터는 문자형 데이터에 속하며, 오라클에서 제공하는 문자형은 다음과 같다.
    • CHAR(크기[BYTE | CHAR])
      • 고정 길이 문자, 최대 2000byte, 디폴트 값은 1byte
    • VARCHAR2(크기[BYTE | CHAR])
      • 가변 길이 문자, 최대 40000byte, 디폴트 값은 1byte
    • NCHAR(크기)
      • 고정길이 유니코드 문자(다국어 입력가능), 최대 2000byte, 디폴트 값은 1
    • NVARCHARCHAR2(크기)
      • 가변길이 유니코드 문자(다국어 입력가능), 최대 4000byte, 디폴트 값은 1
    • LONG
      • 최대 2GB크기의 가변길이 문자형, 잘사용하지 않음
  • 위에서 가변길이라 함은 실제 입력된 데이터 길이에 따라 크기가 변해 정해지는 것을 말한다. 예를 들어 특정 컬럼을 VARCHAR2(10)으로 선언하면, 10byte까지 데이터를 입력할 수 있다. 그런데 이컬럼에 'bac'이라고 세글자만 입력하면 실제 컬럼길이는 3byte가 된다. 반면, 고정길이 CHAR(10)으로 만든 후 'bac'라고 입력하면 세 문자만 입력해도 컬럼길이는 10byte가 된다.
숫자 데이터 타입 #
  • 오라클에서 제공하는 숫자형 데이터는 다음과 같다.
    • NUMBER[(p,[s])]
      • 가변숫자, p(1~38, 디폴트 값은 38)와 s(-84~127, 디폴트 값은 0)는 십진수 기준, 최대 22byte
    • FLOAT[(p)]
      • NUMBER의 하위타입, p는 1~128, 디폴트 값은 128, 이진수 기준, 최대 22byte
    • BINARY_FLOAT
      • 32비트 부동소수점 수, 최대 4byte
    • BINARY_DOUBLE
      • 64비트 부동소수점 수, 최대 8byte
  • 숫자 타입은 총 4가지가 있긴 하지만 NUMBER만 사용할 떄가 많다. 다른 DBMS는 INTEGER와 같은 정수형, DECIMAL과 같은 실수형을 제공한다. 오라클도 이런 타입으로 컬럼을 생성할 수 있지만 내부적으로는 모두 NUMBER형으로 변환되어 생성된다.
날짜 데이터 입력 #
  • 오라클에서 제공하는 날짜형 데이터는 다음과 같다.
    • DATE
      • BC 4712년 1월 1일 부터 9999년 12월 31일, 연, 월, 일, 시, 분, 초까지 입력가능
    • TIMESTAMP[(fractional_seconds_precision)]
      • 연도, 월, 일, 시, 분, 초는 물론 밀리초까지 입력가능
  • 가장 일반적이고 많이 사용하는 날짜 데이터 타입은 DATE이며 연, 월, 일과 시, 분, 초 까지 입력 가능하다. TIMESTAMP는 초 단위를 더 세부적으로 입력 할 수 있다.

NULL #

  • NULL은 '값이 없음'을 의미하며 테이블을 생성할 때 컬럼 속성에 기술한다. 디폴트 값이 NULL이므로 별도로 지정하지 않으면 해당 컬럼은 NULL을 허용하게 된다. NULL을 허용하지 않으려면 NOT NULL 구문을 명시해야 한다. NULL허용이란 해당 컬럼에 값을 넣지 않아도 된다는 의미이며, NOT NULL로 명시한 컬럼에 데이터를 넣지 않으면 해당 로우 INSERT 자체가 불가능하다.

제약조건 #

  • 제약조건(constraints)은 컬럼에 대한 속성 형태로 정의하지만 엄연히 오라클 데이터베이스 객체 중하나이며 데이터 무결성을 보장하기 위한 용도로 사용된다. 제약조건에는 NOT NULL, UNIQUE, 기본키, 외래키, CHECK등이 있다.

    1. NOT NULL
      • 컬럼명 데이터타입 NOT NULL
      • 앞의 NULL에서 설명 했듯이, 컬럼을 정의할 때 NOT NULL 제약조건을 명시하면 해당 컬럼에는 반드시 데이터를 입력해야한다. 즉, 반드시 값이 들어있어야 하는 컬럼에 는 NOT NULL 제약조건을 만들어 사용한다.
    2. UNIQUE
      • 컬럼명 데이터타입 UNIQUE
      • CONSTRAINTS 제약조건명 UNIQUE(컬럼명,...)
      • UNIQUE 제약조건 역시 데이터베이스 객체이므로, 컬럼 정의 부분에 UNIQUE를 명시하거나 별도로 CONSTRAINTS 키워드를 사용해 정의할 수 있다. UNIQUE와 NOT NULL을 같이 명시하면 해당 컬럼에 들어오는 값은 유일함은 물론 반드시 입력해야한다. 또한, NULL허용 컬럼에도 UNIQUE 제약조건을 붙일 수 있다.
    3. 기본키
      • 기본키(Primary key)라고한다. 보통 테이블에 키를 생성했다라고 할때, 이는 기본키를 의미한다. 기본키는 UNIQUE와 NOT NULL 속성을 동시에 가진 제약조건으로 테이블 당 1개의 기본키만 생성할 수 있다.
    4. 외래키
      • 외래키(Foreign key)는 테이블 간의 참조 데이터 무결성을 위한 제약조건이다.
      • 반드시 참조하는 테이블이 먼저 생성되어야 하며, 참조키가 참조 테이블의 기본키로 만들어져 있어야 한다.
      • 외래키에 사용할 수 있는 컬럼 개수는 최대 32개다.
      • 여러 컬럼을 외래키로 만들려면, 참조하는 컬럼과 외래키 컬럼의 순서와 개수는 같아야 한다.
    5. CHECK
      • 컬럼에 입력되는 데이터를 체크해 특정 조건에 맞는 데이터만 입력 받고 그렇지 않으면 오류를 뱉어 낸다.

테이블 삭제 #

DROP TABLE [스키마.] 테이블명 [CASCADE CONSTRAINTS]

테이블 변경 #

  1. 컬럼명 변경 : col1 컬럼 이름을 col11로 변경
    • ALTER TABLE [스키마.]테이블명 RENAME COLUMN 변경전컬럼명 TO 변경후컬럼명;
  2. 컬럼 타입 변경 : col2 컬럼을 VARCHAR2(10)에서 VARCHAR2(30)으로 변경
    • ALTER TABLE [스키마.] 테이블명 MODIFY 컬럼명 데이터타입;
  3. 컬럼 추가 : col3 NUMBER 타입으로 신규 생성
    • ALTER TABLE [스키마.] 테이블명 ADD 컬럼명 데이터 타입;
  4. 컬럼 삭제 : col4 컬럼을 삭제
    • ALTER TABLE [스키마.] 테이블명 DROP COLUMN 컬럼명;
  5. 제약조건 추가 : col11에 기본키 추가
    • ALTER TABLE [스키마.] 테이블명 ADD CONSTRAINTS 제약조건명 PRIMARY KEY (컬럼명, ...);
  6. 제약조건 삭제 : col11에 기본키 삭제
    • ALTER TABLE [스키마.] 테이블명 DROP CONSTRAINTS 제약조건명;

#

  • 뷰는 하나 이상의 테이블이나 다른 뷰의 데이터를 볼 수 있게 하는 데이터베이스 객체이다. 실제 데이터는 뷰를 구성하는 테이블에 담겨 있지만 마치 테이블처럼 사용 할 수 있다. 또한, 테이블 뿐만아니라 다른 뷰를 참조해 새로운 뷰를 만들어 사용할 수 있다. 데이터를 본다는 의미가 있으므로 뷰의정의는 데이터를 조회하는 SELECT문으로 구성된다.

뷰 생성 #

CREATE OR REPLACE VIEW [스키마.]뷰명 AS
SELECT 문장;

뷰 삭제 #

DROP VIEW [스키마.]뷰명;

인덱스 #

  • 인덱스는 테이블에 있는 데이터를 빨리 찾기 위한 용도의 데이터베이스 객체다. 책을 볼때 특정내용을 빨리 찾기 위해 맨 뒤에 있는 찾아보기 항목을 사용해 본적이 있을 텐데, 이 찾아보기 부분이 인덱스라고 생각하면 된다. 그 특성에 따라 대표적인 인덱스를 분류하면 대략 다음과 같다.
    1. 인덱스 구성 컬럼 개수에 따른 분류 : 단일 인덱스와 결합 인덱스
    2. 유일성 여부에 따른 분류 : UNIQUE 인덱스, NON_UNIQUE 인덱스
    3. 인덱스 내부 구조에 따른 분류 : B-tree인덱스, 비트맵인덱스, 함수 기반 인덱스

인덱스 생성 #

CREATE[UNIQUE] INDEX [스키마명.]인덱스명 ON [스키마명.] 테이블명(컬럼1,컬럼2,,,);

인덱스 삭제 #

DROP INDEX [스키마명.] 인덱스명;

시노님 #

  • 시노님은 동의어란 뜻이다. 데이터베이스 객체는 각자 고유한 이름이 있는데, 이객체들에 대한 동의어를 만드는 것이 바로 시노님이며 이 또한 데이터베이스 객체에 속한다.

시노님 생성 #

CREATE OR REPLACE [PUBLIC] SYNONYM [스키마명.]시노님명 FOR[스키마명.]객체명;

시노님 삭제 #

DROP [PUBLIC] SYNONTM [스키마명.]시노님명;

시퀀스 #

  • 시퀀스는 자동 순번을 반환하는 데이터베이스 객체다. 예를 들어, 현재 사원 테이블의 사번값은 100부터 206까지 인데 숫자형으로 되어있다. 만약 신입사원이 들어온다면 206다음인 207번으로 생성될 것이다. 그런데 207이란 숫자를 얻으려면 기존사원번호 중 최대값을 구해 1을 더해야하고, 이 로직을 어딘가에 심어놔야 하는데, 특정한 로직을 통해 사번을 추출하는 것이 아니라 단순히 증감 연산을 이용해 유일한 숫자를 구할 때는 시퀀스를 사용하면 편리하다.

시퀀스 생성 #

CREATE SEQUENCE [스키마명.]시퀀스명
INCREMENT BY 증감숫자
START WITH 시작숫자
NOMINVALUE | MINVALUE 최소값
NOMAXVALUE | MAXVALUE 최대값
NOCYCLE | CYCLE
NOCACHE | CACHE;

시퀀스 삭제 #

DROP SEQUENCE [스키마명.]시퀀스명;
0.0.1_20231010_1_v71