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