Storing personal data on an invoice to preserve data integrity
The solution I have seen is copying address data to the InvoiceHeader table.  This is redundancy, but it is not harmful*.  Update anomalies do not occur, because the address on the invoice should not be changed later.

An analogous point could be made about copying product price data into the InvoiceDetail table.

* Update anomales only occur for harmful redundancy.  Still, if the customer address changes in the customer table at a later point in time, but remains unchanged in the InvoiceHeader table, then they will no longer be redundant.