SQLiteにRust風「エディション」が必要な理由
मूल शीर्षक: SQLite should have (Rust-style) editions
यह क्यों महत्वपूर्ण है
SQLiteのデフォルト設定の問題は多くの開発者に影響し、安全な設計変更の議論はOSSコミュニティ全体に関わる重要な課題である。
ブログ記事によると、SQLiteはデフォルト設定に重大な問題を抱えており、外部キー制約が無効・型チェックが緩いなど、開発者が意図せずバグを生む構造になっている。Rustのエディション方式の導入が提案されている。
SQLiteは組み込みプロジェクトやローカルデータ保存のデファクトスタンダードとして広く使われているが、筆者はそのデフォルト設定に根本的な問題があると指摘する。
**問題1:外部キー制約がデフォルトで無効**
他のRDBMSとは異なり、SQLiteは外部キー制約をデフォルトで無視する。これにより、参照先が存在しない「ダングリング参照」が発生しても何もエラーが出ない。さらにSQLiteのROWID再利用アルゴリズムにより、削除済みIDに新しい行が割り当てられると、誤った行を正しい参照として返す可能性がある。例えばBobが削除されAliceが同じIDを得ると、BobのポストがAliceに帰属するように見えてしまう。修正には`PRAGMA foreign_keys = ON;`が必要だが、これはデフォルトではない。
**問題2:カラムの型チェックが緩い**
SQLiteの型システムはNULL・INTEGER・REAL・TEXT・BLOBの5種類だが、INTEGER型カラムに文字列を格納してもエラーにならない。これを「型アフィニティ」と呼び、柔軟性を意図した設計だが、実際には予期しないバグの温床となる。
筆者はこれらの問題を解決するために、RustのEditionシステムのように、新しいデフォルト設定を持つ「エディション」をSQLiteに導入すべきだと提案している。既存のデータベースとの後方互換性を維持しつつ、新規プロジェクトでは安全なデフォルトを選べる仕組みが理想的だとしている。