본문 바로가기
Database/Oracle

[ORACLE] TABLE() 생성부터 제약 조건 설정까지 완전 정복

by Papa Martino V 2025. 6. 9.
728x90

오라클 TABLE() 생성부터 제약조건 설정까지 완전 정복
[Oracle] TABLE

 

1. Oracle에서 TABLE이란?

TABLE은 Oracle Database에서 데이터를 저장하는 가장 기본적인 객체입니다. 각 테이블은 행(Row)과 열(Column)로 구성되며, 데이터베이스의 핵심인 구조적 정보를 담고 있습니다.

2. 테이블 생성 기본 문법

CREATE TABLE 테이블명 (
  컬럼명 데이터타입 [제약조건],
  ...
);

예제: 기본 테이블 생성

CREATE TABLE employees (
  employee_id   NUMBER PRIMARY KEY,
  first_name    VARCHAR2(50),
  last_name     VARCHAR2(50) NOT NULL,
  hire_date     DATE,
  salary        NUMBER(10,2)
);

3. 데이터 타입 주요 종류

데이터 타입 설명
VARCHAR2(n) 가변 길이 문자열 (최대 n 바이트)
CHAR(n) 고정 길이 문자열
NUMBER(p,s) 정수 또는 소수
DATE 날짜와 시간
CLOB 대용량 문자 데이터

4. 제약조건(CONSTRAINT) 설명

  • PRIMARY KEY: 테이블 내에서 유일하고 NULL 허용 안됨
  • UNIQUE: 중복 금지, NULL 허용 가능
  • NOT NULL: NULL 입력 금지
  • CHECK: 조건을 만족하는 데이터만 허용
  • FOREIGN KEY: 외래 키 설정

5. 제약조건 포함 테이블 생성 예제

CREATE TABLE departments (
  department_id   NUMBER PRIMARY KEY,
  department_name VARCHAR2(100) NOT NULL,
  manager_id      NUMBER,
  location_id     NUMBER,
  CONSTRAINT fk_location FOREIGN KEY (location_id)
    REFERENCES locations(location_id)
);

6. 테이블에 주석 달기 (COMMENT)

COMMENT ON TABLE employees IS '직원 기본 정보 테이블';
COMMENT ON COLUMN employees.salary IS '직원의 월급';

7. 테이블 변경 (ALTER TABLE)

ALTER TABLE employees ADD department_id NUMBER;
ALTER TABLE employees MODIFY salary NUMBER(12,2);
ALTER TABLE employees DROP COLUMN hire_date;

8. 테이블 삭제

DROP TABLE employees;
DROP TABLE employees CASCADE CONSTRAINTS;

CASCADE CONSTRAINTS는 종속된 제약조건까지 함께 삭제합니다.

9. 테이블 복사 및 구조 복제

CREATE TABLE emp_copy AS SELECT * FROM employees;
CREATE TABLE emp_struct LIKE employees;

두 번째 예제는 Oracle에서는 공식적으로 지원하지 않지만, 구조만 복제하려면 SELECT 조건에 WHERE 1=0 등을 활용합니다.

10. 실무 팁: 파티션 테이블 생성 예

CREATE TABLE sales_data (
  sale_id     NUMBER,
  sale_date   DATE,
  amount      NUMBER
)
PARTITION BY RANGE (sale_date) (
  PARTITION sales_2023 VALUES LESS THAN (TO_DATE('2024-01-01','YYYY-MM-DD')),
  PARTITION sales_2024 VALUES LESS THAN (TO_DATE('2025-01-01','YYYY-MM-DD'))
);

11. 테이블 정보 확인 쿼리

SELECT table_name FROM user_tables;
DESC employees;
SELECT column_name, data_type, nullable FROM user_tab_columns WHERE table_name = 'EMPLOYEES';

12. 성능 관련 고려사항

  • 테이블 설계 시 정규화 vs 반정규화 균형 유지
  • 자주 사용하는 칼럼에는 인덱스 고려
  • 대용량 테이블은 파티셔닝 고려
  • 데이터 주기성, 삭제 정책도 고려해야 유지보수 쉬움

13. 테이블과 관련된 시스템 뷰

  • USER_TABLES: 현재 사용자 테이블 목록
  • USER_TAB_COLUMNS: 칼럼 정보
  • DBA_TABLES, ALL_TABLES: 전체/권한 내 테이블 정보
  • USER_CONSTRAINTS: 제약조건 정보

14. 결론

Oracle 테이블은 모든 데이터 구조의 핵심으로, 정확한 설계와 관리가 매우 중요합니다. 비즈니스 로직에 따라 데이터 타입, 제약조건, 파티션 등의 요소를 전략적으로 활용하면 성능과 유지보수 효율성 모두를 높일 수 있습니다.

출처

728x90