This is a very relevant point. I think the answer is that you can only tell whether your data is normalized after referring to the system requirements, and even then 2 designers will come up with 2 different models.
For example your design for customer may be fine if you will only envisage selling to individuals in the US, but what if you are dealing with corporations? Do you need to be able to separate out billing, delivery addresses or people? To what extent do you need to model the organizational structure within your customers? Do you need to hold a history of customer information or is it OK to overwrite the address with the current address if someone moves house? What happens if someones name changes e.g. through marriage or obtaining a doctorate degree? And if you need to send out invoices, you'll probably need an immutable version of customer data for legal audit purposes.
In my experience, the answers to some of these questions will not necessarily be clear initially and typically a client will not be able to specify all these requirements without help. It also requires making judgment calls. Which is where we come in as database designers and IMO makes it a fascinating role.
Of course we can go too far and come up with a design such as
thing (id, thing_type_id, name, value)
thing_type (id, name, value)
etc,
or even store all the business logic in the database.
This can be perfectly valid 3NF and satisfy all business requirements, but there might be one or 2 implementation issues ;-)
I don't have an answer, it's just not fair. :-(
Yes, it's not fair. But it can very satisfying.