검증을 DB 안으로 밀어넣어
SQLite도 다른 관계형 DB에서 기대할 만한 컬럼 단위 제약을 다 지원해. 그러니까 써. schema에 박아둔 제약은 어떤 언어로 짠 코드가 들어오든 모든 insert와 update에서 돌아. 그게 네가 원하는 거잖아.
- NOT NULL — 이 컬럼에는 NULL을 못 넣어.
- DEFAULT expr — insert가 이 컬럼을 빼먹으면 대신 들어갈 값이야.
- UNIQUE — row들 사이에서 값이 겹치면 안 돼. 컬럼 하나에 걸 수도 있고
UNIQUE(a, b)처럼 묶어서 걸 수도 있어. - CHECK (expr) — 컬럼 위에 아무 boolean 표현식이나 걸 수 있어. 결과가 false면 insert나 update가 실패해.
- FOREIGN KEY — 다른 테이블의 키를 참조해. 다음 트랙에서 제대로 다뤄.
Principle: 제약은 실행되는 문서야. NOT NULL과 CHECK가 박힌 schema는 다음에 이 테이블을 읽는 사람한테 — 피파든 너든 팀원이든 — 이 테이블이 어떤 약속을 지키고 있는지 알려줘. 주석은 썩지만 제약은 시끄럽게 실패하거든.