Що особливого у первинному ключі?
Яке призначення таблиці в схемі? Яке призначення ключа таблиці? Що особливого у первинному ключі? Обговорення навколо первинних ключів, здається, не вказує на те, що первинний ключ є частиною таблиці, і що таблиця є частиною схеми. Що найкраще для взаємовідносин таблиці та таблиці, слід керувати ключем, який використовується.
Таблиці (та зв’язки таблиць) містять факти про інформацію, яку ви хочете записати. Ці факти повинні бути самостійними, осмисленими, легко зрозумітими і не суперечливими. З точки зору проектування, інші таблиці, додані або вилучені із схеми, не повинні впливати на відповідну таблицю. Повинна бути мета зберігання даних, що стосуються лише самої інформації. Розуміння того, що зберігається в таблиці, не повинно вимагати проведення науково-дослідного проекту. Жоден факт, що зберігається з однаковою метою, не повинен зберігатися не один раз. Клавіші - це ціла або частина записуваної інформації, яка є унікальною, а первинний ключ - це спеціально призначений ключ, який повинен бути первинною точкою доступу до таблиці (тобто його слід вибирати для узгодженості та використання даних, а не просто вставляти виконання).
- ВІДПОВІДЬ: На жаль побічний ефект більшості баз даних, що розробляються та розробляються програмістами прикладних програм (що я іноді), полягає в тому, що те, що найкраще для програми або рамки програми, часто визначає вибір первинного ключа для таблиць. Це призводить до цілочисельних і GUID-ключів (оскільки їх просто використовувати для рамок додатків) та монолітних конструкцій таблиць (оскільки вони зменшують кількість об'єктів рамки програми, необхідних для представлення даних у пам'яті). Ці рішення, засновані на розробці баз даних, призводять до значних проблем узгодженості даних при використанні в масштабі. Створені таким чином рамки застосування, природно, призводять до створення таблиці за часом. "Часткові записи" створюються в таблицях і даних, заповнених з часом. Уникає взаємодії між кількома таблицями або при використанні викликає непослідовні дані, коли програма функціонує неправильно. Ці конструкції призводять до безглуздих (або важких для розуміння) даних, розповсюдження даних по таблицях (ви повинні подивитися на інші таблиці, щоб зрозуміти поточну таблицю) та дублюваних даних.
Говорили, що первинних ключів має бути стільки, скільки потрібно. Я б сказав, що ключі повинні бути лише стільки, скільки потрібно. Слід уникати випадкового додавання безглуздих полів до таблиці. Ще гірше зробити ключ із випадково доданого безглуздого поля, особливо коли він руйнує залежність приєднання з іншої таблиці до первинного ключа. Це розумно лише в тому випадку, якщо в таблиці немає хороших ключів-кандидатів, але це явище, безумовно, є ознакою поганої конструкції схеми, якщо вона використовується для всіх таблиць.
Також було сказано, що первинні ключі ніколи не повинні змінюватися, оскільки про оновлення первинного ключа завжди не повинно йти мова. Але оновлення те саме, що і видалення, після чого вставити. За цією логікою ви ніколи не повинні видаляти запис із таблиці одним ключем, а потім додавати інший запис другим ключем. Додавання сурогатного первинного ключа не знімає факту існування іншого ключа в таблиці. Оновлення непервинного ключа таблиці може зруйнувати значення даних, якщо інші таблиці залежать від цього значення за допомогою сурогатного ключа (наприклад, таблиця стану із сурогатним ключем, що опис статусу змінено з 'Оброблено' на 'Скасовано ', безумовно, пошкодили б дані). Те, що завжди повинно бути без сумніву, - це руйнування сенсу даних.
Сказавши це, я вдячний за багато погано розроблених баз даних, які існують сьогодні в бізнесі (безглузді-сурогатні-ключі-дані-пошкоджені-1NF-гегемоти), тому що це означає, що для людей, які розуміють правильний дизайн бази даних, існує нескінченна кількість роботи. . Але з сумної сторони, це іноді змушує мене відчувати себе Сизіфом, але я обділяю, що він мав один чорт 401 к (до аварії). Тримайтеся подалі від блогів та веб-сайтів для важливих питань дизайну бази даних. Якщо ви проектуєте бази даних, знайдіть дату CJ. Ви також можете посилатися на Celko на SQL Server, але тільки якщо ви спочатку тримаєте ніс. З боку Oracle, посилання на Тома Кейта.