Foundations of Databases: The Logical Level