When creating a Funds or Assets table, I often encounter the same problem: not all Assets have the same identifier.
For example: 70% have ISIN , some of them have bloomberg code, some of them both, some of them have only AccountingID , coming from the local accounting package, etc.
In general, I end up providing this table with a surrogate PK, plus various fields for all possible identifiers ( Bloomberg, ISIN, AccoutingID , ..)
I once inherited a database where the developer transferred alternative keys to the [Identifiers] child table, on the assumption that he did not know in advance all possible alternative keys.
This identifier table looked like this:
AssetID (surrogate)IdentifierType (ex: ISIN)IdValue
What is the best solution?
I think the first (single table) is best, because even if I risk having multiple Nulls, ISIN is ISIN and is the correct attribute of Fund .
source share