Since SQLite doesn’t handle cascade remove by default, we need to handle it manually. Also some refacto