Каковы критерии дизайна для первичных ключей? - PullRequest
8 голосов
/ 03 сентября 2010

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

Каковы критерии?

Ответы [ 12 ]

1 голос
/ 03 сентября 2010

На самом деле только один, выберите суррогат для каждой таблицы (identity / auto_number) или что-то похожее, что пользователи даже не увидят, поэтому вы можете делать с ними все, что вам нужно, когда вам нужно сейчас и в будущем.

0 голосов
/ 06 сентября 2010

Я собираюсь сказать здесь кое-что, что не ожидается.

Все, что они преподают в базе данных о нормализации и ключах, совершенно неверно, когда дело доходит до выбора первичных ключей.

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

Если ваш запрос доминантного диапазона не относится к ключу-кандидату, выв конечном итоге с первичным ключом, который не применяется для уникальности!Это иногда называют кластеризованным индексом, который является неправильным, потому что индекс отсутствует.

Теперь все ключи нормализации и кандидата важны, и вы захотите ввести уникальные ограничения по крайней мере для некоторых из них.Но не назначайте первичный ключ, потому что это естественный ключ.На самом деле это медленнее, чем определение индекса и уникального ограничения.Определите первичный ключ, основываясь только на запросах диапазона.

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

РЕДАКТИРОВАТЬ: определение запроса диапазона:
Запрос диапазона - это запрос ORDER BY.запрос или содержит оператор больше или меньше чем.Нас интересуют столбцы, для которых выполняются эти запросы.Фундаментальная идея заключается в том, что запрос диапазона выбирает несколько (от десятков до сотен, возможно, тысяч, но не всех) строк из таблицы на основе ограничивающих условий на одном или обоих концах.
Существует другой тип запросов диапазона, и именно здесь выиметь внешний ключ к другой таблице, и операция состоит в том, чтобы выбрать все соответствующие этому внешнему ключу.На самом деле это также запрос диапазона, хотя это не так.

...