Что особенного в первичном ключе?
Какова цель таблицы в схеме? Какова цель ключа таблицы? Что особенного в первичном ключе? Обсуждения вокруг первичных ключей, похоже, упускают из виду тот факт, что первичный ключ является частью таблицы, а эта таблица является частью схемы. Что лучше для таблицы и отношений таблицы, должно использовать ключ, который используется.
Таблицы (и связи таблиц) содержат факты об информации, которую вы хотите записать. Эти факты должны быть самодостаточными, значимыми, понятными и не противоречащими друг другу. С точки зрения дизайна, другие таблицы, добавленные или удаленные из схемы, не должны влиять на данную таблицу. Должна быть цель для хранения данных, связанных только с самой информацией. Понимание того, что хранится в таблице, не требует проведения научно-исследовательского проекта. Ни один факт, хранящийся для одной и той же цели, не должен храниться более одного раза. Ключи представляют собой целую или часть записываемой информации, которая является уникальной, а первичный ключ - это специально назначенный ключ, который должен быть основной точкой доступа к таблице (т. Е. Его следует выбирать для согласованности и использования данных, а не просто для вставки). производительность).
- В сторону: к сожалению, побочный эффект большинства разрабатываемых баз данных
и разработчики прикладных программ (которые я иногда)
то, что лучше всего подходит для приложения или платформы приложения часто
управляет выбором первичного ключа для таблиц. Это приводит к целому числу и
Ключи GUID (так как они просты в использовании для каркасов приложений) и
конструкции монолитных столов (так как они уменьшают количество приложений
каркасные объекты, необходимые для представления данных в памяти). Эти
Прикладные решения по проектированию баз данных приводят к значительным данным
проблемы согласованности при использовании в масштабе. Фреймворки приложений
разработанные таким образом, естественно, приводят к столу одновременно.
«Частичные записи» создаются в таблицах, а данные заполняются с течением времени.
Взаимодействие с несколькими столами избегается или когда используется вызывает противоречивость
данные, когда приложение работает неправильно. Эти конструкции ведут
к данным, которые не имеют смысла (или трудно понять), распространение данных
над таблицами (вы должны смотреть на другие таблицы, чтобы понять смысл
текущая таблица) и дублированные данные.
Было сказано, что первичные ключи должны быть настолько маленькими, насколько это необходимо. Я бы сказал, что ключи должны быть настолько большими, насколько это необходимо. Следует избегать случайного добавления бессмысленных полей в таблицу. Еще хуже сделать ключ из случайно добавленного бессмысленного поля, особенно когда оно разрушает зависимость соединения от другой таблицы к неосновному ключу. Это разумно только в том случае, если в таблице нет хороших ключей-кандидатов, но это, безусловно, признак плохой схемы схемы, если она используется для всех таблиц.
Также было сказано, что первичные ключи никогда не должны изменяться, поскольку обновление первичного ключа всегда должно быть исключено. Но обновление аналогично удалению с последующей вставкой. По этой логике вы никогда не должны удалять запись из таблицы с одним ключом, а затем добавлять другую запись со вторым ключом. Добавление суррогатного первичного ключа не устраняет тот факт, что другой ключ в таблице существует. Обновление неосновного ключа таблицы может разрушить значение данных, если другие таблицы имеют зависимость от этого значения через суррогатный ключ (например, таблица состояния с суррогатным ключом, описание состояния которого изменено с «Обработано» на «Отменено»). 'определенно испортил бы данные). То, что всегда должно быть исключено, это уничтожение значения данных.
НаличиеСказав это, я благодарен за многие плохо спроектированные базы данных, которые существуют сегодня на предприятиях (бессмысленные-суррогатные ключи-данные-повреждены-1NF), потому что это означает, что есть бесконечный объем работы для людей, которые понимают правильный дизайн базы данных. Но с грустной стороны, это иногда заставляет меня чувствовать себя как Сизиф, но я держу пари, что у него был один черт 401k (до крушения). Держитесь подальше от блогов и веб-сайтов для важных вопросов дизайна базы данных. Если вы разрабатываете базы данных, посмотрите CJ Date. Вы также можете ссылаться на Celko для SQL Server, но только если сначала будете держать себя за нос. На стороне Oracle, ссылка Тома Кайта.