Design is good place to start with for any Project/Product.
Often I have observed databases are designed on the fly with data being normalized
at a logical level and mostly with a thought to suffice a specific business requirement.
Arriving at logical pieces which can later be easily extended towards
addressing different needs of business can be of great value which in turn ensures flexibility of the proposed model.
Let us consider a business requirement to have a Login. As
depicted below, “User” is the most possible derived logical entity.
Now let us consider another business need to have Customer
list into the system. As depicted below,
“Customer” stays the most possible derived logical entity.
Considering the attributes of User and Customer, an entity
named Person can be derived to hold the basic demographic details which an
individual can have. This way User and Customer can be inherited from the Person
entity as depicted below .
The same Person entity can be extended to User, Customer, Employee,... and so on, thus not having to repeat the basic details representing an individual and also maintaining a single point of reference for any individual.