注目★★★★★Lobsters
SQLite の「おかしなデフォルト」をRust流エディション制で修正すべき
30秒で把握
- 1SQLiteの外部キー制約がデフォルト無効化され、削除後の ID 再利用で誤ったレコード参照が発生する実装設計上の課題
- 2INTEGER カラムへの TEXT 格納やデータ型の柔軟すぎる検証が本来なら防げるバグの原因に
- 3PRAGMA・STRICT 宣言で回避可能だが手動対応のため、Rust のエディション概念を導入して新版で厳格デフォルト化が提案される
要約
SQLiteの著者は、外部キー制約が無効化されていることとスキーマ型の柔軟性を理由に、型チェックを厳格にしないデフォルト設計を採用している。しかし外部キー制約の無視はデータ一貫性を損ない、ROWIDの再利用により削除後の新規挿入が誤ったレコード参照につながる危険性を招く。型システムも同様で、INTEGER カラムに TEXT を格納するなど型検証不足がバグの温床になっている。
あなたへの影響
SQLiteを本番環境やスキーマ重視のプロジェクトで使う場合、PRAGMA foreign_keys = ON と STRICT テーブル宣言は事実上の必須対応。
推奨:現在手動設定が必要だが、著者提案の「エディション」採用で将来的に安全性が組み込まれる可能性がある。