검증을 DB 안으로 밀어넣어
SQLite 는 다른 관계형 DB 에서 기대하는 컬럼 단위 제약을 지원해. 써. Schema 의 제약은 어떤 언어가 코드를 짰든 모든 insert/update 에서 돌아 — 그게 원하는 거잖아.
- NOT NULL — NULL 안 됨.
- DEFAULT expr — insert 가 컬럼 생략하면 쓰는 값.
- UNIQUE — row 들 사이에서 unique. 컬럼 단위 또는 테이블 단위 (
UNIQUE(a, b)). - CHECK (expr) — 컬럼(들) 위 임의 boolean 표현식. false 면 insert/update 실패.
- FOREIGN KEY (다음 트랙) — 다른 테이블의 키 참조.
Principle: 제약은 실행되는 문서야. NOT NULL + CHECK 가 있는 schema 는 다음 reader (피파, 너, 팀원) 한테 그 테이블이 어떤 invariant 를 유지하는지 알려줘. 주석은 썩지만 제약은 시끄럽게 실패해.