The broad general approach that I always try to follow is to start with the development of domain models. This is your "ubiquitous language" that will define business objects and concepts, contain business logic (later when you have one) and, as a rule, a common language used in all parts of the system.
The idea is that everyone should be understood (or at least understood). For example, some manager in some other department will not necessarily understand relational databases or anything else about saving his department data. But he understands the business process of his department. Their native language, their concepts, their interactions, etc. The ubiquitous language is a common community shared by groups.
During this process, you must keep your addictions in your mind. The biggest is usually the constancy of the data. There's some kind of golden dream that domain models are persistent or impolite in general, and with the goal of separating issues that are good. However, true ignorance of addiction can paint you in the corner. You may run into serious performance issues or architectural issues that require a lot of redesign later.
So sometimes get distracted by domain modeling to think about persistence (and other external dependencies, such as external services that need to be used, or third-party applications that need to be integrated). When you model the domain, make sure that the model still works properly with everything you need. You may have to slightly compromise the ubiquitous language here and there to take into account the limitations of dependency.
Basically, create a domain model before creating a database. But do not forget about the database during this process.
David source share