# 열 정의

## Content

테이블 스키마는 원시 데이터가 데이터 매니저 내부에서 어떻게 해석되고 관리되는지를 정의합니다.
스키마 내에서 열은 핵심 모델링 단위입니다.
각 열은 레코드의 필드가 테이블 내부에서 어떻게 동작하는지를 설명합니다.
열은 UI 요소가 아닙니다.
열은 식별자, 형식, 동작 및 표시 메타데이터를 결정하는 데이터 모델링 정의입니다.

## 레코드에서 열로

데이터가 테이블에 로드되면 데이터 원본의 각 객체는 레코드(행)가 됩니다.

```javascript
const table = dataManager.addTable("orders", {
    data: [
        { id: 1, price: 10, quantity: 2 }
    ],
    schema: {
        columns: {
            id: { dataType: "number", isPrimaryKey: true },
            price: { dataType: "number" },
            quantity: { dataType: "number" },
            total: {
                dataType: "formula",
                value: "=[@price] * [@quantity]"
            }
        }
    }
});
```

이 예제에서:

* `id`는 레코드 식별자를 정의합니다.
* `price`와 `quantity`는 형식이 지정된 필드를 정의합니다.
* `total`은 다른 필드에서 파생된 계산 열입니다.

열 정의가 없으면 필드는 기본 동작을 사용하여 해석됩니다.
열을 명시적으로 정의하면 데이터가 구조화되고 관리되는 방식을 제어할 수 있습니다.

## 열 정의로 제어할 수 있는 항목

열 정의는 다음을 지정할 수 있습니다.

* 필드가 원시 데이터에 매핑되는 방식
* 값이 구문 분석되고 형식화되는 방식
* 레코드를 고유하게 식별하는지 여부
* 계산 열인지 또는 이벤트 기반 열인지 여부
* 유효성 검사 및 인덱싱 동작
* 기본 표시 메타데이터

책임을 명확하게 유지하기 위해 열 구성은 다음 범주로 구성됩니다.

### [핵심 구조 설정](/spreadjs/docs/features/data-manager/defining-schema/defining-columns/core-structure-settings)

식별자 및 구조 매핑을 정의합니다.
예:

* 열 이름 및 데이터 매핑
* `dataType`
* `isPrimaryKey`
* 수식 기반 값 정의

이러한 설정은 레코드가 구조적으로 어떻게 해석되는지를 결정합니다.

### [데이터 동작 설정](/spreadjs/docs/features/data-manager/defining-schema/defining-columns/data-behavior-settings)

구문 분석 이후 열 값이 어떻게 동작하는지를 제어합니다.
예:

* 필수 및 읽기 전용 규칙
* 기본값
* 구문 분석 패턴
* 인덱싱
* Null 및 빈 값에 대한 표시 대체값

이러한 설정은 유효성 검사, 정규화 및 성능에 영향을 줍니다.

### [고급 데이터 설정](/spreadjs/docs/features/data-manager/defining-schema/defining-columns/advanced-data-settings)

동적 및 관계형 동작을 활성화합니다.
예:

* 수식 열
* 트리거 수식
* 조회 정의
* 관계 인식 기능

이러한 설정은 계산 기능과 제어된 값 도메인을 제공합니다.

### [스타일 및 UI 메타데이터](/spreadjs/docs/features/data-manager/defining-schema/defining-columns/style---ui-metadata)

View에서 렌더링될 때의 기본 표시 동작을 정의합니다.
예:

* 캡션 및 너비
* 셀 스타일 및 머리글 스타일
* 조건부 서식
* 유효성 검사 규칙
* 상호 작용 컨트롤

이러한 설정은 저장된 데이터를 수정하지 않습니다.
대신 View가 사용할 수 있는 기본 메타데이터를 제공합니다.

## 책임 범위

열 정의는 테이블 스키마에 속합니다.
열 정의는:

* 데이터 매니저 내부에서 데이터가 동작하는 방식을 모델링합니다.
* 특정 UI 구현과 독립적으로 유지됩니다.

[View](/spreadjs/docs/features/data-manager/view)는 열 메타데이터를 사용하여 데이터를 렌더링합니다.
View 수준 구성은 스키마를 변경하지 않고도 표시 관련 설정을 재정의할 수 있습니다.
이러한 분리를 통해 문서 체계와 제품 아키텍처 내에서 데이터 모델링과 표시가 서로 분리된 상태로 유지됩니다.