Hyperledger Fabric is based on key-value stores like LevelDB and CouchDB. Therefore, don't really gain any benefit from normalizing data. In relational databases, you do it for easy indexing and joins, but in key-value stores joins do not exist.
What you can do is create indexes on your data. This will enable faster querying.
This is covered in the Marbles tutorial chaincode (l.108+):
let indexName = 'color~name'
let colorNameIndexKey = await stub.createCompositeKey(indexName, [marble.color, marble.name]);
For modeling your assets in Hyperledger Composer you can use .cto definitions.