As computers become larger (in capacity), smaller (in size), and more powerful, it becomes easier to do more complex things with them than could be done in the past. This is as true of DataBase Management Systems (DBMSs) as of any other type of software. The central feature of a DBMS is its data model, the formal abstraction which it uses to map real-world entities onto (logical) database entities. Many different DBMSs may implement the same abstract data model. Data models are becoming increasingly powerful and complex day by day, and with this power and complexity comes the need to ensure correct and efficient execution of queries on data with increasingly complex structure.