Cloud application practitioners are building large-scale enterprise applications as microservices, to leverage scalability, performance, and availability. Microservices architecture allows a large monolithic application to be split into small, loosely coupled services. A service communicates with other services using lightweight protocols such as RESTful APIs. Extracting microservices from the monolith is a challenging task and is mostly performed manually by system architects based on their skills. This extraction involves both: 1) Partitioning of business logic, 2) Partitioning of database. For partitioning of business logic, the existing research studies focus on decomposition by considering the dependencies in the application at the class-level. However, with the passage of time, monolith application classes outgrow their size defying the Single Responsibility Principle (SRP). So, there is a need to consider the code within the classes when identifying microservices. Current studies also lack the partitioning of database and ignore the mapping of Database Entities (DE) to the microservices. In this paper, we present a Comprehensive Microservice Extraction Approach (CMEA) that considers: 1) Both classes and their methods to define and refine microservices, 2) Associate the DE to microservices using newly devised eight guiding rules handling ownership conflicts. This approach has been applied to three benchmark web applications implemented in Java and one in-house application implemented in both Java and Python. Our results demonstrate better or similar software quality attributes in comparison to the existing related studies. CMEA improves software quality attributes by 22%. System architects can easily identify microservices along with their DE using our approach. The CMEA is generic and language-independent so it can be used for any application