database abstraction start