Actually the only field you should have wholly unique on an SI is the key field. The key field will be a hash of all the fields that give this SI a unique identity. Usually those will be something along the lines of Host.key+SI.type+SI.instance. Key generation is vital when pattern writing as it is this field that is used to decide if a new node is needed or an existing one updated. Given that the key field tends to be a hash it is not normally displayed.
The name field contains a number of pieces of information because this field is the one usually used in summaries, reports and page titles. From experience most users expect this field to be unique and reflect the identity of the SI and when we trialled having partial information it caused a lot of confusion. People felt there were lots of duplicates and it was hard to locate, say, the Apache Webserver you were interested in a list of 200.
Clearly you could write reports that included all the “identity” fields, but this is not complete enough as the Foundation model is flexible enough to cope with variable numbers of “identity” fields unlike the fixed keys of an RDBMS. So if a particular product can run as two instances on the same server differentiated by the port they listen on then we can form a key from Host.key+SI.type+SI.port whereas if the way to differentiate them is by the config file they load we can form a key from Host.key+SI.type+SI.config_file.path. So it would be difficult to form a report showing all fields.
So the convention is to set the name field to the “readable” or “plain text” equivalent to the key field. For SIs this leads to names of the form “<SI.type> identified as <SI.instance> running on <Host.name>” when the key field is Host.key+SI.type+SI.instance and so on.
The name tends to be unique as it reflects the key. In some edge cases it may not make sense to include all the “identity” fields in the name, say if one of them is a 20 character license key, as it would make it largely unreadable.
These conventions apply to all the nodes in the inferred part of the model.
So the best thing to remember is that the key field is the true unique id and the one you should use if you need to write patterns. The name is the plain text equivalent of the key and is the one to use in everyday reporting.
Sorry for the long reply, but hopefully it provides a bit more insight into the model and the datastore.