2013-07-23 3 views
0

Пример таблицы:Использование двух идентификаторов - хорошая идея?

------------------------------------ 
| Id | ItemId | Description | Price | 
------------------------------------ 

Два идентификаторов (Id и ItemId) являются уникальными и генерируются автоматически. Разница между ними заключается в том, что первый идентификатор (Id) используется как классический идентификатор для идентификации в таблице, а второй идентификатор (ItemId), используемый как поле идентификации элемента, и устойчив к очистке стола (при выполнении классического сброса идентификатора) и миграции.

Это хорошая идея или нет? И почему? Пожалуйста, объясни.

+2

Что такое * сброс классического идентификатора *? –

+0

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

+1

Это вообще плохая идея. Будете ли вы делать это для многомиллионных таблиц строк и связанных с ними FK? Я так не думаю. –

ответ

2

Это очень распространенная практика реализации (по крайней мере) два ключа на таблицу: а суррогатный ключ, как правило, используются для целей ссылочной целостности (Id в вашем примере) и естественный ключ - AKA домена ключ или бизнес-ключ - используется как идентификатор в бизнес-домене (предположительно ItemId в вашем примере).

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

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

1

Фактически полностью зависит от ваших требований. Если ваше требование говорит вам, что вам понадобится личность, тогда идите в идеале, это не очень хорошая привычка использовать столбцы идентификаторов, это не имеет смысла на уровне данных, и трудно иметь столбец идентификатора как внешний ключ. Рекомендуется использовать столбец Identity только в том случае, если у вас нет первичного первичного ключа в данных.