This course aims at furthering database systems concepts through adding complexity and a more hands-on approach. In particular, we will focus on supporting multi-dimensional data in a DBMS, query optimization, query evaluation, transaction processing and concurrency control in both a centralized and a distributed context. In terms of centralized databases, we shall start from single and multi-dimensional indexing methods, move on to join evaluation algorithms, and talk about query optimization paradigms. We shall then focus on the issues of transaction processing, concurrency control and crash recovery. Finally, we shall revisit the previous issues in a distributed database environment.