2013-10-02 8 views
1

Мой вопрос более или менее противоположный this one: Почему бы вам никогда не захотелось найти естественный первичный ключ в отношении, когда использование последовательности в качестве суррогата кажется намного проще ,Каковы преимущества поиска первичного первичного ключа

BradC упомянутый в his answer вопрос, связанный с тем, что критерии выбора первичного ключа - это уникальность, неповторимость, простота, стабильность и знакомость. Мне кажется, что использование последовательности жертвует последним критерием, чтобы обеспечить оптимальное решение для первых четырех.

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

+1

Я уверен, что «знакомый» - это то, что нужно сделать прямо противоположно тому, что вы говорите, т. Е.* не усложнять жизнь * – bengoesboom

+0

Вопрос, похоже, основан на очень фундаментальном заблуждении, что для таблиц потребуется только один ключ и что любой ключ будет делать. Неправильно и неправильно! Более разумным было бы спросить «Учитывая фундаментальное значение естественных ключей в дизайне базы данных, в каких обстоятельствах можно считать выгодным усложнять жизнь, добавив суррогатный ключ?» – sqlvogel

+1

Посмотрите на эту [ссылку] (http://stackoverflow.com/tags/surrogate-key/info) на несколько размышлений по этой теме. –

ответ

2

Обычно нужно определить, что уникальный ключ на данные в любом случае, как вы все равно должны быть в состоянии гарантировать, что данные не дублируются.

Сила синтетического ключа заключается в том, что он позволяет изменять значения уникального естественного ключа в будущем, при этом детские записи не нуждаются в обновлении.

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

+0

Это звучит неплохо. Итак, в идеальном мире у нас есть как первичный ключ, так и возможность применения уникального ограничения _set_ атрибутов? – scozy

+0

@scozy. В случае ключей из доменов, не находящихся под вашей юрисдикцией (например, SSN), даже сложно (и, следовательно, _silly_) принудительно применять к ним ограничение UNIQUE. Логически они уникальны, и в совершенном мире они должны быть уникальными. Но в реальной жизни это не так, потому что источники данных не идеальны. Эта проблема ухудшается, когда несколько (timestamped) версий ключей с почти кандидатами могут сосуществовать. (для получения дополнительной информации: google для «хранилища данных») – wildplasser

+0

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

5

Чтобы получить значимое значение из таблицы поиска, не делая ненужных объединений.

Пример: garments ссылается на таблицу соответствия цветов, которая имеет первичный ключ с автоматическим приращением. Получение имени цвета требует присоединиться:

SELECT c.color 
FROM garments g 
JOIN colors c USING (color_id); 

Simpler примера: сам colors.color является первичным ключом этой таблицы, и, следовательно, это столбец внешнего ключа в любой таблице, которая ссылается на нее.

SELECT g.color 
FROM garments g 
+0

Это интересный пример. Такая ситуация для меня никогда не случалась, но я не специализируюсь в базах данных. Часто ли это происходит в вашем профессиональном опыте? – scozy

+0

Использование справочных таблиц? Да все время. Использование натуральных ключей в справочных таблицах? Да все время. –

4

Ответ целостность данных. Экземпляры объектов в бизнес-домене вне базы данных по определению идентифицируют вещи. Если вы не предоставите им внешние, реальные идентификаторы в базе данных, то эта база данных вряд ли сможет правильно моделировать реальность.

Естественный ключ [1] - это то, что гарантирует, что факты в базе данных могут быть идентифицированы с реальными вещами в реальности, которую вы пытаетесь моделировать. Это средства, на которые пользователи полагаются, когда они действуют и обновляют данные в базе данных. Ограничения, обеспечивающие соблюдение этих ключей, - это реализация бизнес-правил. Если ваша база данных должна точно моделировать бизнес-домен, то естественные ключи не только желательны, но и важны. Если вы сомневаетесь, что тогда вы недостаточно провели бизнес-анализ. Просто спросите своих клиентов, как они думают, что их бизнес будет работать, если они останутся, глядя на экраны, наполненные дублирующимися данными!

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

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