단일 열 데이터 사용 사례 도메인 사용

소개

Oracle Database 23ai는 데이터베이스 내에서 재사용 가능하고 중앙 집중식 데이터 속성을 정의할 수 있는 강력한 기능을 제공합니다. 이 가이드에서는 단일 열에 대한 데이터 사용 사례 도메인을 생성, 연결, 수정 및 관리하는 방법을 자세한 예제와 함께 설명합니다. 데이터 사용 사례 도메인은 값의 유효성 검사, 표시 형식 지정, 저장 속성 정의 등 다양한 목적을 위해 사용될 수 있습니다.

단일 열 데이터 사용 사례 도메인 생성

단일 열 데이터 사용 사례 도메인은 데이터 유형, 제약 조건, 표시 속성 등을 포함하는 속성 집합을 정의합니다. 다음은 ‘hourly_wages’라는 이름의 도메인을 생성하는 예제입니다. 이 도메인은 시간당 임금을 나타내며, 0보다 크거나 같고 1000보다 작거나 같은 숫자 유형의 값을 갖습니다.

CREATE DOMAIN hourly_wages AS NUMBER
 DEFAULT 0
 CONSTRAINT hourly_wages_ck CHECK (hourly_wages >= 0 AND hourly_wages <= 1000)
 ORDER BY hourly_wages
 DISPLAY '$FM999.99';

이 예제에서는 다음과 같은 속성을 설정합니다.

  • DEFAULT 0: 기본값으로 0을 설정합니다.
  • CONSTRAINT hourly_wages_ck CHECK (hourly_wages >= 0 AND hourly_wages <= 1000): 값의 범위를 0에서 1000 사이로 제한하는 제약 조건을 설정합니다.
  • ORDER BY hourly_wages: 값을 정렬하는 방식을 지정합니다.
  • DISPLAY '$FM999.99': 값을 표시하는 형식을 지정합니다.

다음은 생년월일 도메인을 생성하는 예제입니다. 이 도메인은 DATE 유형을 사용하며, 생년월일의 유효성을 검사하는 제약 조건을 포함합니다.

CREATE DOMAIN birth_date AS DATE
 CONSTRAINT valid_birth_date CHECK (birth_date BETWEEN DATE '1900-01-01' AND CURRENT_DATE)
 ANNOTATIONS (sensitive = 'PII Data');

이 예제에서는 다음과 같은 속성을 설정합니다.

  • CONSTRAINT valid_birth_date CHECK (birth_date BETWEEN DATE '1900-01-01' AND CURRENT_DATE): 생년월일이 1900년 1월 1일부터 현재 날짜 사이에 있도록 제약 조건을 설정합니다.
  • ANNOTATIONS (sensitive = 'PII Data'): 개인 식별 정보(PII)로 표시하는 주석을 설정합니다.

테이블 생성 시 도메인 연결

다음은 테이블을 생성할 때 기존 도메인을 열에 연결하는 방법을 보여줍니다.

CREATE TABLE employees (
 employee_id NUMBER PRIMARY KEY,
 first_name VARCHAR2(50) NOT NULL,
 last_name VARCHAR2(50) NOT NULL,
 salary NUMBER,
 hourly_wage NUMBER DOMAIN hourly_wages,
 hire_date DATE DOMAIN birth_date
);

이 예제에서는 hourly_wage 열에 hourly_wages 도메인을 연결하고, hire_date 열에 birth_date 도메인을 연결합니다. 이제 hourly_wage 열에 삽입되는 모든 값은 해당 도메인에 정의된 제약 조건을 준수해야 합니다. 예를 들어, hourly_wage에 1500을 삽입하려고 하면, 정의된 제약 조건에 위배되어 오류가 발생합니다.

기존 열에 도메인 연결

기존 테이블에 새 도메인을 연결하려면 ALTER TABLE 문을 사용합니다.

ALTER TABLE employees
MODIFY hourly_wage DOMAIN hourly_wages;

도메인 수정

기존 도메인의 속성을 수정하려면 ALTER DOMAIN 문을 사용합니다.

ALTER DOMAIN hourly_wages
MODIFY CONSTRAINT hourly_wages_ck CHECK (hourly_wages >= 0 AND hourly_wages <= 2000);

이 예제에서는 hourly_wages 도메인의 제약 조건을 수정하여 값의 범위를 0에서 2000 사이로 변경합니다.

도메인의 표시 형식을 수정하는 예제는 다음과 같습니다.

ALTER DOMAIN hourly_wages MODIFY DISPLAY '$FM9,999.99';

데이터 조작어(DML) 사용

이제 도메인과 연결된 열에 데이터를 삽입하거나 쿼리할 수 있습니다. 다음은 employees 테이블에 데이터를 삽입하는 예제입니다.

INSERT INTO employees (employee_id, first_name, last_name, salary, hourly_wage, hire_date)
VALUES (1, 'John', 'Doe', 60000, 50, DATE '1990-05-20');

이 예제에서는 hourly_wage 열에 50을 삽입합니다. 이 값은 hourly_wages 도메인에 정의된 제약 조건을 준수하므로 삽입이 성공적으로 수행됩니다. 만약 hourly_wage 열에 2500을 삽입하려고 하면, 제약 조건에 위배되어 오류가 발생합니다.

INSERT INTO employees (employee_id, first_name, last_name, salary, hourly_wage, hire_date)
VALUES (2, 'Jane', 'Smith', 70000, 2500, DATE '1985-10-15');
-- ORA-02290: check constraint (HR.HOURLY_WAGES_CK) violated

생년월일 데이터 형식을 지정하여 데이터를 삽입하는 예제는 다음과 같습니다.

INSERT INTO employees (employee_id, first_name, last_name, salary, hourly_wage, hire_date)
VALUES (3, 'Mike', 'Johnson', 80000, 60, DATE '2024-12-25');
-- ORA-02290: check constraint (HR.VALID_BIRTH_DATE) violated

유연한 단일 열 데이터 사용 사례 도메인 생성

유연한 도메인을 사용하면 특정 열에 대해 여러 도메인을 정의하고, 특정 조건에 따라 다른 도메인을 선택할 수 있습니다. 예를 들어, 주소 열에 대해 국내 주소 또는 해외 주소 형식을 적용할 수 있습니다.

먼저, 국내 주소와 해외 주소에 대한 도메인을 정의합니다.

CREATE DOMAIN domestic_address AS VARCHAR2(100)
 CONSTRAINT valid_domestic_address CHECK (REGEXP_LIKE(VALUE, '[0-9]{5}'));

CREATE DOMAIN international_address AS VARCHAR2(100)
 CONSTRAINT valid_international_address CHECK (LENGTH(VALUE) > 5);

다음으로, CASE 문을 사용하여 국가 코드에 따라 다른 도메인을 선택하는 유연한 도메인을 생성합니다.

CREATE DOMAIN flexible_address AS VARCHAR2(100)
  DEFAULT CASE country_code
    WHEN 'US' THEN USER_DEFINED.domestic_address
    ELSE USER_DEFINED.international_address
  END;

이 유연한 도메인을 열에 연결하면, 데이터베이스는 country_code 열의 값에 따라 domestic_address 또는 international_address 도메인을 적용합니다.

CREATE TABLE offices (
 office_id NUMBER PRIMARY KEY,
 office_name VARCHAR2(50) NOT NULL,
 country_code VARCHAR2(2) NOT NULL,
 address VARCHAR2(100) DOMAIN flexible_address
);

결론

Oracle Database 23ai에서 제공하는 데이터 사용 사례 도메인 기능을 사용하여 데이터 모델의 일관성과 유효성을 효과적으로 관리할 수 있습니다. 다양한 속성을 설정하고, 테이블 생성 시 또는 기존 열에 도메인을 연결하여 데이터 품질을 향상시킬 수 있습니다. 유연한 도메인을 사용하여 조건에 따라 다른 제약 조건을 적용할 수도 있습니다.

위로 스크롤