Keys, uniqueness and required values
Create enforceable rules: legal rows succeed, duplicates and missing values fail as required. A plausible-looking schema is not enough.
PRIMARY KEY identifies a row, UNIQUE limits duplication, and NOT NULL forbids a missing value. These differ. Explicitly add NOT NULL to a text key rather than rely on SQLite exceptions.