# 내장 Sqlite3 데이터베이스 어댑터 스키마

## Content

## SQL

```auto
CREATE TABLE IF NOT EXISTS documents (
  id TEXT PRIMARY KEY,
  type TEXT NOT NULL,
  version INTEGER NOT NULL,
  snapshot_version INTEGER NOT NULL
);

CREATE TABLE IF NOT EXISTS operations (
  doc_id TEXT NOT NULL,
  version INTEGER NOT NULL,
  operation TEXT NOT NULL,
  PRIMARY KEY (doc_id, version),
  FOREIGN KEY (doc_id) REFERENCES documents (id) ON DELETE CASCADE
);

CREATE TABLE IF NOT EXISTS snapshot_fragments (
  doc_id TEXT NOT NULL,
  fragment_id TEXT NOT NULL,
  data TEXT NOT NULL,
  PRIMARY KEY (doc_id, fragment_id),
  FOREIGN KEY (doc_id) REFERENCES documents (id) ON DELETE CASCADE
);
```

## 스키마

| **테이블 이름** | **컬럼 이름** | **데이터 타입** | **설명** |
| ------ | ----- | ------ | --- |
| @cols=1:@rows=4:documents | id | TEXT | 문서의 고유 식별자 |
| version | INTEGER | 문서의 버전 번호 |
| snapshotVersion | INTEGER | 스냅샷 버전 번호 |
| type | TEXT | 문서 타입 |
| @cols=1:@rows=3:ops | roomId | TEXT | 룸 ID |
| version | INTEGER | 작업(Operation)의 버전 |
| data | TEXT | 작업과 관련된 데이터 |
| @cols=1:@rows=3:fragments | roomId | TEXT | 룸 ID |
| fragmentId | TEXT | 프래그먼트의 고유 식별자 |
| data | TEXT | 프래그먼트와 관련된 데이터 |
