Ні SQL, ні реляційна модель не порушуються сторонніми ключами, які посилаються на природний ключ. Насправді, посилання на природні ключі часто значно покращує продуктивність. Ви були б здивовані, як часто потрібна інформація повністю міститься в природному ключі; посилання на те, що ключ торгує приєднанням для ширшої таблиці (і, отже, зменшує кількість рядків, які ви можете зберігати на одній сторінці).
За визначенням, потрібна вам інформація завжди повністю міститься в природному ключі кожної таблиці "пошуку". (Таблиця пошуку термінів неформальна. У реляційній моделі всі таблиці є лише таблицями. Таблиця поштових індексів США може мати рядки, які виглядають приблизно так: {AK, Alaska}, {AL, Alabama}, {AZ, Arizona} і т. д. Більшість людей називають цю таблицю пошуку.)
У великих системах незвично знаходити таблиці, у яких є більше одного ключа-кандидата. Також незвично для таблиць, які обслуговують одну частину підприємства для посилання на один кандидат-ключ, і таблиці, які обслуговують іншу частину підприємства для посилання на інший кандидат-ключ. Це одна з сильних сторін реляційної моделі, і це частина реляційної моделі, яку SQL досить добре підтримує.
У вас виникнуть дві проблеми, коли ви посилаєтесь на природні ключі в таблицях, які також мають сурогатний ключ.
По-перше, ви здивуєте людей. Хоча я зазвичай сильно лобіюю « Принцип найменшого сюрпризу» , це одна ситуація, коли я не заперечую над дивними людьми. Коли проблема полягає в тому, що розробників дивує логічне використання сторонніх ключів, рішення - це освіта, а не перепроектування.
По-друге, ORM зазвичай не розроблені навколо реляційної моделі, і вони іноді втілюють припущення, які не відображають найкращої практики. (Насправді вони часто здаються спроектованими без будь-якого введення даних професіонала БД.) Потрібна кількість ідентифікаційного номера в кожній таблиці - одне з цих припущень. Ще один припущення, що програма ORM "володіє" базою даних. (Отже, безкоштовно створювати, видаляти та перейменувати таблиці та стовпці.)
Я працював над системою баз даних, яка обслуговувала дані для сотень прикладних програм, написаних щонайменше двома десятками мов протягом 30 років. Ця база даних належить підприємству, а не ORM.
Вилка, яка вводить порушення змін, повинна бути стопором.
Я вимірював продуктивність як натуральними ключами, так і сурогатними ключами в компанії, в якій працював. Існує переломний момент, коли сурогатні ключі починають перевершувати природні ключі. (Якщо не докладати додаткових зусиль для збереження високої продуктивності природного ключа, наприклад, розділення, часткові індекси, індекси на основі функцій, додаткові таблиці, використання твердотільних дисків тощо). приблизно 2045. Тим часом вони отримують кращі показники роботи за допомогою природних клавіш.
Інші відповідні відповіді: У схемі баз даних заплутані