You can change the default for foreign key enforcement when you compile SQLite3. Unless you change the default at compile time, the default default is disabled. Perhaps there should be a compile-time option for whether or not NULL is permitted in the declared PRIMARY KEY of rowid tables as well. Similarly, the default default could be to allow NULL in rowid table PRIMARY KEY as is the current case, and if you wish different behaviour then you can change it. Other misfeatures already have this behaviour (foreign-key enforcement, whether to allow double-quoted strings, to name a couple). While DQS works for DML, the options to prevent DQS in DDL does not.