What’s wrong with banking? Each customer is a “one”, and has a history of transactions on the account–deposits, interest payments, counter withdrawals, checks paid, and debit card transactions. Obviously unless the customer just opened the account five minutes ago, there will be more than one transaction for each customer–thus you have your “many”.
So to begin with, tell your friend that the essence of normalization is the elimination of any duplication of data, other than where it is needed to allow you to cross-reference between lists. For example, the master customer record for each account holder has some sort of unique key value to identify it. For simplicity’s sake let’s say it’s the account number, although I suspect that banks use something different in order to add an extra layer of security.
The transactions also have a unique key identifier of which the account number forms a part; in addition there might be a date and sequence number to differentiate all the transactions for one customer. You wouldn’t want to have the customer’s address and phone number duplicated in the transactions, but in the early days of computing, that is how it was often done, because accessing data on cards and tapes was so difficult.
(You ask your friend if they follow you so far.)
Going a little further, we probably want to record the kind of transaction for each instance. But we don’t want to store “Debit Card Purchase” or “Interest Payment” or whatever it is, a million times for all our customers, so we set up additional lists that assign numerals to each transaction type; then in the transaction record itself, we record just a “1”, or “2”, or whatever, as appropriate. We program the system to look up in the additional lists when it needs to display the transaction type.
Notwithstanding all this (you continue), perfect normalization is an ideal that is usually not recommended. The more closely you approach it, the more often you have to combine tables to run a single query. Depending on the processing resources you have, you have to weigh the advantages of greater normalization against the greater system cost that can ensue if such normalization is done inappropriately. This usually happens if the original data design was ill suited for how it is being used today.
(Now offer them a nice glass of wine. They (and you) deserve it!)