[DATABASE] 객체의 종류와 TABLE
- 데이터베이스 객체
- 종류
DATABASE OBJECT???
데이터베이스 객체로는 데이터를 저장해 놓고 꺼내 쓰는 가장 기본적인 객체인 테이블 부터 뷰, 인덱스, 시노님, 시퀀스 등이 있는데, 대표적인 데이터베이스 객체들을 정리하면 아래 표와 같음.
DataBase's Object |
EXPLAIN |
TABLE |
데이터 담고 있는 객체. |
VIEW |
하나 이상의 테이블 연결해서 마치 테이블인 것처럼 사요하는 객체. |
INDEX |
테이블에 있는 데이터를 바르게 찾기 위한 객체. |
SYNONYM(동의어) |
데이터베이스 객체에 대한 별칭을 부여한 객체. |
SEQUENCE |
일련번호 채번을 할 때 사용되는 객체. |
FUNCTION |
특정 연산을 하고 값을 반환하는 객체. |
PROCEDURE |
함수와 비슷하지만 값을 반환하지 않는 객체. |
PACKAGE |
용도에 맞게 함수나 프로시저 하나로 묶어 놓은 객체. |
- 테이블
- 테이블 생성[CREATE]
Ex) CREATE TABLE 테이블명(
컬럼1 컬럼1_데이터타입 [NULL, NOT NULL],
컬럼2 컬럼2_데이터타입 [NULL, NOT NULL],
. . .
컬럼3 컬럼3_데이터타입 [NULL, NOT NULL]
);
구성 |
LOW(행), COLUMN(열) |
생략가능 |
스키마, 테이블스페이스 |
- 데이터 넣고 수정하고 삭제하는 즉 데이터를 담고 있는 객체가 테이블 임.
- DBMS상에서 가장 기본적인 개체로 로우(행) 와 칼럼(열)으로 구성된 2차원 형태(표)의 객체로 우리가 자주 사용하는 엑셀과 구조가 같다고 보면 이해하기 쉬울 것이다.
- SQL을 필요해 데이터를 조회, 삭제, 입력, 수정할 대상이며 그 결과를 담고 있는 것.
- 테이블을 설계하는 작업은 데이터베이스를 사용할 때 가장 기초적이고 중요한 단계임.
@TABLE 생성
@TABLE 생성 규칙
- 테이블명, 컬럼명의 최대 크기는 30BYTE임.
- 트이블명, 컬럼명으로 예약어는 사용 불가능.
- 테이블명, 칼럼명으로 문자, 숫자, _ , $ , # 만 가능하며, 첫 글자는 문자만 가능.
- 한 테이블에 사용 가능한 컬럼은 최대 255개임.
- 데이터 타입 : column에 저장되는 데이터의 타입을 가르키는 것.
타입의 종류 |
기본 타입(Oracle에서 제공하는 타입들) |
사용자 정의 데이터 타입 |
문자 데이터 타입 |
설명 |
기본 값 |
CHAR(크기[BYTE | CHAR]) |
고정길이 문자, 최대 이천바이트 |
1BYTE |
VARCARCHAR2(크기[BYTE | CHAR]) |
가변길이 문자, 최대 사천바이트 |
1BYTE |
NCHAR(크기) |
고정길이 유니코드 문자(다국어지원) 최대 이천바이트 |
1BYTE |
NVARCARCHAR2(크기) |
가변길이 유니코드 문자(다국어지원) 최대 사천바이트 |
1BYTE |
LONG |
최대 2기가 크기의 가변길이 문자형, 사용빈도 낮음 |
- |
숫자 데이터 타입 |
설명 |
기본 값 |
NUMBER[(P, [S])] |
가변숫자, P(1~38)와 S(-84~127)는 십진수 기준, 최대 22BYTE |
P=38, S=0 |
FLOAT[(P)] |
NUMBER의 하위 타입, P는 1~128, 이진수 기준, 최대 22BYTE |
128 |
BINARY_FLOAT |
32BIT 부동소수점 수, 최대 4BYTE |
- |
BINARY_DOUBLE |
64BIT 부동소수점 수, 최대 8BYTE |
- |
LONG |
최대 2기가 크기의 가변길이 문자형, 사용빈도 낮음 |
- |
- 테이블 생성
- 테이블 삽입
- 파티션 테이블
@PARITION TABLE
테이블 내의 특정 칼럼값을 기준으로 데이터를 분할해서(파티션) 테이블을 생성하는 방법. 논리적으로는 하나의 테이블이지만 물리적으로는 분할한 만큼 파티션이 만들어져 입력되는 컬러맚에 따라 분할된 파티셧별로 데이터가 저장됨.
목적 : 대용량 테이블의 경우 관리 및 조회시 효율성과 성능을 높이기 위해.
Ex)
판매회사의 대용량(100만건이라 가정) 매출정보가 담겨있는 SALES 라는 테이블이 있다. SALES에서 특정 데이터를 찾으려면 100만건을 모두 조회해봐야 한다. 인덱스를 사용하면 조금 더 수월해지겠지만, 그렇다하더라도 100만건을 조회하는건은 같다. 이때 판매일, 판매월과 같은 특정 칼럼들을 이용해 분할하게되면 전체를 조회하지않아도 된다.
[Example]
- Card 테이블에 연도 (CreationTime) 컬럼을 추가하고 파티셔닝함.
1 2 3 4 5 6 7 8
|
create table businessCard( ID INT NoT Null, Name varchar(255), Address varchar(255) , Telephone varchar(255) , CreateTime DATE ) PARTITION BY RANGE(YEAR(CreationTime)) ( PARTITION p0 VALUES LESS THAN(2013), PARTITION p1 VALUES LESS THAN(2014), PARTITION p2 VALUES LESS THAN(2015), PARTITION p3 VALUES LESS THAN MAXVALUE);
|
- 파티션 추가 와 삭제
1 2 3 4 |
추가 ALTER TABLE Card ADD PARTITION(PARTITION p4 VALUES LESS THAN(2005)); 삭제 ALTER TABLE Card DROP PARTOTION p4; |
- 파티션 분할 / 병합
1 2 3 |
ALTER TABLE CardREORGANIZE PARTITION p3 INTO(PARTITION p3 VALUES LESS THAN(2015), PARTITION p4 VALUES LESS THAN MAXVALUE); |
▶ 파시션을 하여 정보를 나누웠는데도 P3에 데이터가 많은 경우 P3을 P3 ,P4로 더욱 분할하는 경우
1 2 3 |
ALTER TABLE Card REORGANIZE PARTITION p2,p3 INTO(PATITION p23 VALUES LESS THAN(2014)); |
▶파티션을 P2 , P3으로 만들었지만 데이터가 적어서 P23으로 병합하는 경우