Направляет личный тип данных для баз данных?

Он связан с BI и слиянием данных из разных источников данных и сделает этот процесс более плавным.

И есть ли оптимальная стратегия перехода из базы данных без Гидов в версию с Гидами без потери информации?

Ответ 1

Отредактировано после того, как прочитал ответ Франса Бумы, поскольку мой ответ был принят и поэтому перенесен на вершину. Спасибо, Франс.

GUID действительно делают хорошую уникальную ценность, однако из-за их сложного характера они не очень удобочитаемы для человека, что может затруднить поддержку. Если вы собираетесь использовать GUID, вы можете подумать о том, чтобы провести анализ производительности операций с массовыми данными, прежде чем сделать свой выбор. Учтите, что если ваш первичный ключ "кластеризован", то GUID не подходят.

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

Лично мне нравится иметь два "ключа" по моим данным:

1) Основной ключ
Уникальные числовые значения с кластерным первичным ключом. Это мой внутренний идентификатор системы для каждой строки и используется для уникальной идентификации строки и внешних ключей.

Идентификация может вызвать проблемы, если вы используете репликацию базы данных (SQL Server автоматически добавит столбец "rowguid" для таблиц с репликами слияния), поскольку семя идентичности поддерживается на каждый экземпляр сервера, и вы получите дубликаты.

2) Внешний ключ/внешний идентификатор/бизнес-идентификатор Часто также предпочтительно иметь дополнительную концепцию "внешнего идентификатора". Это часто поле символов с уникальным ограничением (возможно, включая другой столбец, например, идентификатор клиента).

Это будет значение, используемое внешними интерфейсами, и будет доступно для клиентов (которые не распознают ваши внутренние значения). Этот "бизнес-идентификатор" позволяет клиентам ссылаться на ваши данные, используя значения, которые что-то означают для них.

Ответ 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)

Ответ 3

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

Даже если вы используете синтетические ключи в своей системе склада (которые вы почти наверняка хотите сделать, если у вас несколько источников данных), вам все равно придется поддерживать аудит. Поместите столбец "Источник данных" и "Естественный ключ" на таблицы в вашей системе и заполните их кодом для источника и представлением того, что уникально идентифицирует запись в источнике.

Если вы это сделаете, синтетические ключи должны быть только ints или числами, достаточно широкими, чтобы хранить достаточно значений (ints, если < 4b строк, если число превышает число). Это означает, что они будут более читабельны, чем GUID.

Ответ 4

Следующий проект может пригодиться или по крайней мере вдохновить вас на решение этой проблемы.

https://github.com/twitter/snowflake

Ответ 5

Все, что может однозначно идентифицировать запись, - это хороший тип данных идентификации. GUID обычно хорош, но это не оптимальная идентификация, если у вас действительно есть уникальный идентификатор, поступающий из исходных данных. GUID - это случайное целочисленное значение, гарантируемое быть уникальным; однако в ситуации интеграции вы часто хотите обнаруживать дубликаты информации, а не просто совпадать с записями.

Ответ 6

Нет "наилучшего" типа данных идентичности. Различные варианты имеют разные сильные и слабые стороны. Я чаще использую GUID, но мне приходится регулярно общаться с отключенными клиентами и объединять репликацию, поэтому выбор подходит. Если вам не нужно иметь дело с репликацией (то есть ситуация, когда пользователь добавляет новые записи при отключении от центральной базы данных), лучше всего использовать автоматически увеличивающееся поле int.

Ответ 7

GUID лучше в сценариях репликации данных, при этом подход "идентичности" должен быть осторожным, чтобы не вызвать конфликты между реплицируемыми данными между базами данных. Надеюсь, это поможет.

Ответ 8

Мне вообще не нравился GUID, но я полюбил его. Я люблю его, потому что он относительно единообразный и принят, и я в конечном итоге пишу меньше кода, используя его и поддерживая этот код, чем обычно писал и поддерживал.

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