How to give a client backups of their data without compromising our database design?
Dumping the data into CSV would be the best way. This way, the data is "most usable" to the client - as opposed to an XML file or even an SQL dump. They could conceivably take that data and use it in another system, for example.

If the data is going to be backed up by the client with the intention of having you (or indeed another party) "restore" or otherwise import that data at a later date, your data dump will need to include Primary and Foreign Keys so you can match the data up again.

For example, you might export a "Category" CSV file which contains CategoryID and CategoryName, a "Customer" CSV file which contains CustomerID, Name, Email etc and a CustomerCategory CSV file which simply contains a list of CustomerID and CategoryID values. You would then be able to use the three CSV files to rebuild the client's Customer and Category tables if required.

You can export the data using outfile as in the following example:

select col1,col2 into outfile '/path/file1.(txt/sql/csv)' fields 
terminated by ',' lines terminated by '\n' from tab ;