1) Understand their requirement completely.
Maybe a simple desktop application or MS-ACCESS data application is what your client needs. Now if you design a hi-fi web application, something that is responsive and mobile friendly, built with superb grids, making ajax calls and what not, imagine all the development time and development cost that you are wasting in this situation.
What is the purpose of this application? Or in other words, what does the client plan to do with data in the database? Who is going to be using it? Which device will be running the application?
The answers to these questions will help you determine how you should design the application.
2) Confirm with the client what they will be getting.
Once you have understood their requirements and come up with a design for their needs, present your proposed solution to the client. Make them clear about what they are getting at the end of the development. Now depending upon how literate the client is regarding software and its development, you might have to be explicit/implicit in your explanations here. But keep in mind this is single most important thing that you will have to keep in mind.
Imagine giving a rough idea of what you will be developing in the beginning and then working on your development. You complete the whole project and bring it happily to the client.
The client looks at it and says, “This is ok but what we need is …“.
You then realize what you have is completely different from what they need. Poles apart. All those happy thoughts of project being completed fade away and you are confronted with another long development period. On top of that, all current development is going to waste!
Even during the development phase, remove assumptions from your end as much as you can. Propose your assumptions before turning them into hard code.