Он связан с BI и слиянием данных из разных источников данных и сделает этот процесс более плавным.
И есть ли оптимальная стратегия перехода из базы данных без Гидов в версию с Гидами без потери информации?
Он связан с BI и слиянием данных из разных источников данных и сделает этот процесс более плавным.
И есть ли оптимальная стратегия перехода из базы данных без Гидов в версию с Гидами без потери информации?
Отредактировано после того, как прочитал ответ Франса Бумы, поскольку мой ответ был принят и поэтому перенесен на вершину. Спасибо, Франс.
GUID действительно делают хорошую уникальную ценность, однако из-за их сложного характера они не очень удобочитаемы для человека, что может затруднить поддержку. Если вы собираетесь использовать GUID, вы можете подумать о том, чтобы провести анализ производительности операций с массовыми данными, прежде чем сделать свой выбор. Учтите, что если ваш первичный ключ "кластеризован", то GUID не подходят.
Это связано с тем, что кластерный индекс заставляет строки физически переупорядочиваться в таблице на вставках/обновлениях. Поскольку идентификаторы GUID являются случайными, каждая вставка потребует фактических строк в таблице для перемещения, чтобы освободить место для новой строки.
Лично мне нравится иметь два "ключа" по моим данным:
1) Основной ключ
Уникальные числовые значения с кластерным первичным ключом. Это мой внутренний идентификатор системы для каждой строки и используется для уникальной идентификации строки и внешних ключей.
Идентификация может вызвать проблемы, если вы используете репликацию базы данных (SQL Server автоматически добавит столбец "rowguid" для таблиц с репликами слияния), поскольку семя идентичности поддерживается на каждый экземпляр сервера, и вы получите дубликаты.
2) Внешний ключ/внешний идентификатор/бизнес-идентификатор Часто также предпочтительно иметь дополнительную концепцию "внешнего идентификатора". Это часто поле символов с уникальным ограничением (возможно, включая другой столбец, например, идентификатор клиента).
Это будет значение, используемое внешними интерфейсами, и будет доступно для клиентов (которые не распознают ваши внутренние значения). Этот "бизнес-идентификатор" позволяет клиентам ссылаться на ваши данные, используя значения, которые что-то означают для них.
Имейте в виду, что GUID (или "unique_identifier" ) для ПК является плохим выбором, так как многие ПК имеют кластерный индекс (поэтому все строки хранятся на диске в индексированном порядке). Поскольку GUID являются случайными, он не уверен, что новая строка будет добавлена в конце индекса, но может быть вставлена в середине индекса. Это приводит к сбою диска при перемещении строк.
ЕСЛИ вы считаете guid's, по крайней мере, используете sqlserver 2005 или вверх и NEWSEQUENTIALID() для значения PK, чтобы получить последовательный указатель, который всегда больше последнего, поэтому всегда добавляются в конце индекса. Если вы не используете sqlserver (но, например, postgresql или используете oracle и используете CHAR (32) или другой тип), рассмотрите COMB (см. http://www.informit.com/articles/article.aspx?p=25862)
Вероятно, вам понадобится средство для отслеживания источника для целей аудита, особенно по финансовым данным.
Даже если вы используете синтетические ключи в своей системе склада (которые вы почти наверняка хотите сделать, если у вас несколько источников данных), вам все равно придется поддерживать аудит. Поместите столбец "Источник данных" и "Естественный ключ" на таблицы в вашей системе и заполните их кодом для источника и представлением того, что уникально идентифицирует запись в источнике.
Если вы это сделаете, синтетические ключи должны быть только ints или числами, достаточно широкими, чтобы хранить достаточно значений (ints, если < 4b строк, если число превышает число). Это означает, что они будут более читабельны, чем GUID.
Следующий проект может пригодиться или по крайней мере вдохновить вас на решение этой проблемы.
Все, что может однозначно идентифицировать запись, - это хороший тип данных идентификации. GUID обычно хорош, но это не оптимальная идентификация, если у вас действительно есть уникальный идентификатор, поступающий из исходных данных. GUID - это случайное целочисленное значение, гарантируемое быть уникальным; однако в ситуации интеграции вы часто хотите обнаруживать дубликаты информации, а не просто совпадать с записями.
Нет "наилучшего" типа данных идентичности. Различные варианты имеют разные сильные и слабые стороны. Я чаще использую GUID, но мне приходится регулярно общаться с отключенными клиентами и объединять репликацию, поэтому выбор подходит. Если вам не нужно иметь дело с репликацией (то есть ситуация, когда пользователь добавляет новые записи при отключении от центральной базы данных), лучше всего использовать автоматически увеличивающееся поле int.
GUID лучше в сценариях репликации данных, при этом подход "идентичности" должен быть осторожным, чтобы не вызвать конфликты между реплицируемыми данными между базами данных. Надеюсь, это поможет.
Мне вообще не нравился GUID, но я полюбил его. Я люблю его, потому что он относительно единообразный и принят, и я в конечном итоге пишу меньше кода, используя его и поддерживая этот код, чем обычно писал и поддерживал.
Это особенно полезно для хранения файлов, где вам нужно гарантировать уникальность имени файла в каталоге с потенциально большим количеством файлов, включая ранее существовавшие файлы.