2012-02-23 4 views
4

При создании таблицы Funds или Assets, я часто сталкиваюсь с той же проблемой: не все Assets имеют одинаковый идентификатор.Дизайн базы данных: множественные потенциальные идентификаторы

Например: 70% имеют ISIN, некоторые из них имеют код bloomberg, некоторые из них имеют, некоторые из них имеют только AccountingID, исходящие из местного пакета учета и т. Д.

Вообще я в конечном итоге, давая эту таблицу суррогатной PK, плюс различные поля для всех возможных идентификаторов (Bloomberg, ISIN, AccoutingID, ..)

я когда-то унаследованную такую ​​базу данных, где разработчик мигрировали альтернативные ключи к дочерний стол [Идентификаторы], исходя из того, что он заранее не знал все возможные альтернативные ключи.

Эта Идентификаторы таблица выглядит следующим образом:

  • AssetID (суррогатной один)
  • IdentifierType (например: ISIN)
  • IdValue

Что является лучшим решением?

Я думаю, что первая (единственная таблица) лучше всего, потому что, даже если я рискую иметь несколько Nulls, ISIN является ISIN и является хорошо определенным атрибутом Fund.

ответ

0

Я бы сделал отдельную таблицу, потому что метод таблицы Идентификатор делает предположения о типе данных idValue. Что делать, если вы получаете что-то новое, которое использует guid, а не int?

Вы все равно можете сделать отдельный столбец для каждого возможного идентификатора актива и сохранить данные об активах в отдельной таблице, которая отделяет суррогатный идентификатор. Подход, который вы принимаете, будет зависеть в основном от того, как вы будете использовать данные и как часто вы можете добавлять новые типы идентификаторов активов.

1

Это немного зависит от ваших потребностей, но второй подход является более гибким, поскольку вы можете обеспечить разумный интерфейс для вставки новой записи «Идентификатор», которая не требует изменения схемы базы данных.

Это обычно используется, если вы не знаете, сколько идентификаторов может существовать, или если вы знали, что вам нужно добавить больше времени.

Первый подход более простой с точки зрения написания запросов и, если идентификаторы являются статическими, возможно, проще всего использовать.

+0

+1 для будущей проверки. Я никогда не доверяю внешним идентификаторам в качестве первичных ключей. Если кто-то другой контролирует их, то у них нет мотивации, чтобы поддерживать стабильность вашей системы, оставив ценности в одиночку. Изоляция нескольких внешних идентификаторов позволяет легко и последовательно извлекать информацию, оставаясь гибкой для будущих изменений. –

+0

Да, я полностью согласен с тем, что тип ненормальности, описанный при вводе идентификаторов в связанную сущность, должен, вероятно, использоваться только в том случае, если вы знаете, что это не изменится, или сингулярное отношение к сущности. – dougajmcdonald

+0

@Joel Brown: решение 1 (отдельная таблица) не подразумевает использование внешних идентификаторов как PK! Я упоминал об использовании суррогатной ПК. –

Смежные вопросы