
스키마는 데이터베이스의 물리적 또는 논리적 설계와 관련된 요소들을 포함하며, 데이터베이스의 다양한 구성 요소들이 어떻게 서로 연결되고 상호 작용하는지를 정의합니다. 이를 구체적으로 설명하자면 다음과 같은 것들을 포함합니다:
1. 테이블 (Tables)
- 정의: 스키마에서 테이블은 데이터가 저장되는 기본 단위입니다. 각 테이블은 행(row)과 열(column)로 구성되며, 각각의 행은 데이터의 레코드(record)를 나타내고, 열은 데이터의 속성을 나타냅니다.
- 예시: customers라는 테이블은 고객 데이터를 저장할 수 있으며, customer_id, customer_name, customer_email과 같은 열을 가질 수 있습니다.
2. 열 (Columns)
- 정의: 열은 테이블 내의 데이터 필드입니다. 각 열은 특정 데이터 타입(예: INTEGER, VARCHAR, DATE 등)을 가지며, 특정한 데이터 속성을 저장합니다.
- 예시: customer_name 열은 고객의 이름을 저장하며, 데이터 타입은 VARCHAR로 설정될 수 있습니다.
3. 데이터 타입 (Data Types)
- 정의: 각 열에 저장될 수 있는 데이터의 유형을 정의합니다. 예를 들어, 숫자, 문자열, 날짜 등의 데이터 타입이 있습니다.
- 예시: amount 열의 데이터 타입은 DECIMAL(10, 2)일 수 있으며, 이는 10자리 숫자 중 소수점 이하 2자리를 허용한다는 의미입니다.
4. 관계 (Relationships)
- 정의: 스키마는 테이블 간의 관계를 정의합니다. 이는 데이터베이스에서 테이블이 서로 어떻게 연결되는지를 나타내며, 외래 키(Foreign Key) 제약 조건을 통해 구현됩니다.
- 예시: orders 테이블의 customer_id 열은 customers 테이블의 customer_id를 참조하여 두 테이블 간에 관계를 설정합니다. 이를 통해 특정 고객이 어떤 주문을 했는지 추적할 수 있습니다.
5. 제약 조건 (Constraints)
- 정의: 데이터베이스에 저장되는 데이터의 무결성을 유지하기 위해 스키마에 정의된 규칙입니다. 이는 PRIMARY KEY, FOREIGN KEY, UNIQUE, CHECK, NOT NULL 등의 제약 조건을 포함합니다.
- 예시: customer_id가 PRIMARY KEY로 정의되면, 이 열의 값은 고유해야 하며, 중복된 값을 가질 수 없습니다.
6. 인덱스 (Indexes)
- 정의: 검색 성능을 향상시키기 위해 특정 열에 대해 인덱스를 생성할 수 있습니다. 인덱스는 테이블의 데이터를 빠르게 검색할 수 있도록 돕는 데이터 구조입니다.
- 예시: customer_email에 인덱스를 생성하면, 이메일로 고객을 검색하는 속도가 빨라집니다.
7. 뷰 (Views)
- 정의: 하나 이상의 테이블에서 데이터를 조회하는 데 사용되는 가상 테이블입니다. 뷰는 실제 데이터를 저장하지 않고, 쿼리 결과를 저장하는 개념적 테이블입니다.
- 예시: 특정 고객이 지난 1년간 주문한 내역을 보여주는 뷰를 생성할 수 있습니다.
8. 스키마 자체
- 정의: 스키마는 데이터베이스의 논리적 설계 또는 구조를 의미하며, 위에 설명된 모든 구성 요소들(테이블, 열, 데이터 타입, 관계, 제약 조건 등)을 포함합니다. 스키마는 데이터베이스에서 어떤 데이터가 저장되고, 이 데이터가 어떻게 구조화되며, 테이블 간의 관계가 어떻게 설정되는지를 전체적으로 정의합니다.
따라서, "구조와 관련된 개념"은 데이터베이스에서 데이터가 어떻게 구성되고, 저장되며, 서로 연결되는지를 정의하는 모든 요소를 포함한다고 할 수 있습니다. 데이터베이스 스키마는 이러한 구조적 요소들을 통해 데이터베이스의 전체적인 설계와 데이터 간의 상호작용을 체계적으로 정의합니다.