여러 열 데이터 사용 사례 도메인 사용

소개

Oracle 데이터베이스 23ai부터 도입된 여러 열 데이터 사용 사례 도메인(multi-column use case domains)은 여러 열에 걸쳐 일관성 있는 데이터 유효성 검사 및 조작을 가능하게 하는 강력한 기능입니다. 본 글에서는 실무에 바로 적용 가능한 여러 열 데이터 사용 사례 도메인 사용법을 자세한 예시와 함께 설명합니다.

개념 이해

여러 열 데이터 사용 사례 도메인은 테이블의 여러 컬럼을 묶어 하나의 논리적 단위로 취급합니다. 이를 통해 컬럼 간의 관계를 명시적으로 정의하고, 데이터의 무결성을 강화할 수 있습니다.

예를 들어, 주소 정보를 저장하는 테이블에서 ‘도시’, ‘도/광역시’, ‘우편번호’ 컬럼을 묶어 ‘주소’ 도메인으로 정의할 수 있습니다. 이렇게 하면 애플리케이션 개발자는 ‘주소’ 도메인에 대한 유효성 검사 규칙을 한 번만 정의하고, 모든 주소 관련 컬럼에 일관되게 적용할 수 있습니다.

여러 열 데이터 사용 사례 도메인 생성 및 사용

다음은 ‘주소’ 도메인을 생성하는 예시입니다.


CREATE DOMAIN us_address AS (
    city VARCHAR2(50),
    state_province VARCHAR2(50),
    postal_code VARCHAR2(10)
) TITLE 'US Address' ANNOTATIONS (description = 'US address information');

  

위 코드에서 CREATE DOMAIN 문을 사용하여 us_address라는 새로운 도메인을 정의합니다. 이 도메인은 city, state_province, postal_code 세 개의 컬럼으로 구성됩니다. TITLEANNOTATIONS 절을 사용하여 도메인에 대한 추가 정보를 제공할 수 있습니다.

다음은 ‘주소’ 도메인을 테이블 컬럼에 적용하는 예시입니다.


CREATE TABLE customers (
    customer_id NUMBER PRIMARY KEY,
    first_name VARCHAR2(50),
    last_name VARCHAR2(50),
    address us_address
);

  

위 코드에서 CREATE TABLE 문을 사용하여 customers라는 새로운 테이블을 생성합니다. 이 테이블에는 address 컬럼이 있으며, 이 컬럼은 앞에서 정의한 us_address 도메인을 사용합니다. 이렇게 하면 customers 테이블의 address 컬럼은 us_address 도메인에 정의된 컬럼 구조를 따르게 됩니다.

여러 열 데이터 사용 사례 도메인 활용 예시

예시 1: 주소 정보 관리

쇼핑몰 웹사이트를 개발한다고 가정해 보겠습니다. 이 웹사이트에서는 고객의 배송 주소 정보를 수집하고 관리해야 합니다. 이 때 여러 열 데이터 사용 사례 도메인을 활용하여 주소 정보를 효과적으로 관리할 수 있습니다.


CREATE DOMAIN address_type AS (
 street VARCHAR2(100) CHECK (LENGTH(street) > 5), -- 도로명 주소
 city VARCHAR2(50) CHECK (LENGTH(city) > 2),
 state VARCHAR2(50), -- 도/광역시
 zipcode VARCHAR2(10) CHECK (REGEXP_LIKE(zipcode, '^[0-9]{5}(-[0-9]{4})?$')),  -- 우편번호 유효성 검사
 country VARCHAR2(50) DEFAULT 'USA' -- 국가
) TITLE 'Shipping Address'
ANNOTATIONS (description => 'Shipping address with validation rules');

CREATE TABLE delivery_addresses (
 address_id NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
 customer_id NUMBER NOT NULL,
 shipping_address address_type,
 billing_address address_type,
 CONSTRAINT fk_customer FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);

  

위 코드에서는 address_type이라는 도메인을 정의하여 주소 정보를 저장하는 컬럼들에 대한 공통된 규칙 (길이, 형식 등)을 설정합니다. delivery_addresses 테이블에서는 shipping_addressbilling_address 컬럼이 이 도메인을 활용하여 주소 정보의 일관성을 확보합니다.

예시 2: 신용 카드 정보 관리

온라인 결제 시스템을 개발할 때 신용 카드 정보를 안전하게 관리하는 것이 중요합니다. 여러 열 데이터 사용 사례 도메인을 사용하여 신용 카드 정보를 저장하고 유효성을 검사할 수 있습니다.


CREATE DOMAIN credit_card_type AS (
 card_number VARCHAR2(20) CHECK (REGEXP_LIKE(card_number, '^[0-9]{16}$')),
 expiry_date VARCHAR2(6) CHECK (REGEXP_LIKE(expiry_date, '^(0[1-9]|1[0-2])([0-9]{2})$')),
 cvv VARCHAR2(4) CHECK (REGEXP_LIKE(cvv, '^[0-9]{3,4}$'))
) TITLE 'Credit Card Information'
ANNOTATIONS (description => 'Valid credit card information');

CREATE TABLE payment_details (
 payment_id NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
 customer_id NUMBER NOT NULL,
 card_details credit_card_type,
 CONSTRAINT fk_customer FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);

  

위 코드에서는 credit_card_type이라는 도메인을 정의하여 카드 번호, 만료일, CVV에 대한 유효성 검사 규칙을 적용합니다. payment_details 테이블에서는 card_details 컬럼이 이 도메인을 활용하여 결제 정보를 안전하게 관리합니다.

예시 3: 환자 정보 관리

병원 정보 시스템에서 환자의 기본 정보를 관리해야 한다고 가정해 보겠습니다. 이름, 생년월일, 성별 등의 정보를 여러 열 데이터 사용 사례 도메인으로 묶어 관리할 수 있습니다.


CREATE DOMAIN patient_info_type AS (
  first_name VARCHAR2(50) NOT NULL,
  last_name VARCHAR2(50) NOT NULL,
  birth_date DATE CHECK (birth_date < SYSDATE), -- 과거 날짜만 허용
  gender VARCHAR2(10) CHECK (gender IN ('Male', 'Female', 'Other'))
) TITLE 'Patient Information'
ANNOTATIONS (description => 'Basic patient information');

CREATE TABLE patients (
  patient_id NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
  patient_details patient_info_type
);

  

위 코드에서는 patient_info_type이라는 도메인을 정의하여 환자 이름, 생년월일, 성별에 대한 유효성 검사 규칙을 적용합니다. 특히 생년월일은 과거 날짜만 허용하도록 제약 조건을 설정했습니다. patients 테이블에서는 patient_details 컬럼이 이 도메인을 활용하여 환자 정보를 효과적으로 관리합니다.

주의사항

  • 도메인 이름은 데이터베이스 내에서 유일해야 합니다.
  • 도메인 정의에 사용되는 데이터 타입은 Oracle 데이터베이스에서 지원하는 타입이어야 합니다.
  • 도메인에 제약 조건을 추가하여 데이터 유효성을 강화할 수 있습니다.

결론

Oracle 데이터베이스 23ai의 여러 열 데이터 사용 사례 도메인 기능은 데이터 모델링의 유연성을 높이고 데이터 무결성을 강화하는 데 유용한 도구입니다. 본 글에서 제시된 예시 외에도 다양한 데이터 관리 시나리오에서 여러 열 데이터 사용 사례 도메인을 활용할 수 있습니다. 여러 열 데이터 사용 사례 도메인을 통해 더욱 효율적이고 안정적인 데이터베이스 애플리케이션을 개발해 보세요.

위로 스크롤