Data Modeling: Theory and Practice