it looks like you are thinking too much about normalization. remember, this is the idea that you reduce data redundancy. your example seems to indicate that you are worried about the "redundancy" in the meta-information of your database project.
ultimately, although user.name and user.description are functional, different from product.name and product.description , and should be considered as such. for status , it depends on what you mean by that. status the product / user indicator indicator only active? if so, then it makes sense to split it into another table.
using the information you provided, if "active / expired / deleted" is just an indication of the state in the database, then I definitely agree with this table structure:
users products status id id id name name name description description status_id status_id
however, if status could be changed to represent something semantically different (i.e. for users who are probably βactive / retired / firedβ, I would suggest splitting it up to future proof of design:
user_status product_status id id name name
in short, normalize your data, not your database design.
Owen
source share