Differential or full data event on a topic

Let us assume that there is a product topic based on which clients (of the topic) create their own local product databases, for their needs. This topic contains a public subset of all product attributes.

Which is better, to always send full product data on change (be it update, create, delete) or just the differential?

What is the best way to initialize the local databases and how to deal with extending the public attributes set, in case some clients need additional attributes?