
4. Реляційні ключі
Необхідно мати можливість унікальної ідентифікації кожного окремого кортежу відносини за значеннями його атрибутів. Термінологія, використовувана для позначення реляційних ключів:
Суперключ – це атрибут або множина атрибутів, що єдиним образом ідентифікує кортеж даного відношення.
Оскільки суперключ може містити додаткові атрибути, які необов'язкові для унікальної ідентифікації кортежу, нас будуть цікавити суперключі, що складаються тільки з тих атрибутів, які дійсно необхідні для унікальної ідентифікації кортежів.
також
Потенційний ключ – це суперключ, що не містить підмножини, що так само є суперключем даного відношення.
Потенційний ключ До для даного відношення R володіє двома властивостями:
Унікальність. У кожному кортежі відносини R значення ключа До єдиним образом ідентифікують цей кортеж.
Неприводимость. Ніяка припустима підмножина ключа До не має властивість унікальності.
Відношення може мати кілька потенційних ключів. Якщо ключ складається з декількох атрибутів, то він називається складеним ключем. Розглянемо відношення | Branch, показане на мал. 3.1. Конкретне значення атрибута City може визначати відразу кілька відділень компанії (наприклад, у Лондоні перебувають два відділення). Тому даний атрибут не може бути обраний як потенційний ключ. З іншого боку, оскільки в навчальному проекті DreamHome для кожного відділення компанії задається його унікальний номер, кожне значення цього номера (атрибут Впо) може визначати не більше одного кортежу (у відношенні Branch -I прим, з,), а тому Впо є потенційним ключем. Аналогічно, атрибут Tel_No і Fax_No також є потенційними ключами цього відношення. Тепер розглянемо відношення Viewing (Огляд), що містить інформацію про ознайомлювальні огляди об'єктів нерухомості потенційними орендарями. Це відношення включає атрибути номера орендаря (Rno), номера об'єкта нерухомості (Рпо), дати перегляду (Date) і, можливо, коментарі. По заданому номері орендаря Rno можна вибрати відомості про декілька оглядів різних об'єктів нерухомості. Аналогічно, по заданому номері об'єкта нерухомості Рпо можна вибрати відомості про декілька орендарів, які оглядали цей об'єкт нерухомості. Отже, сам по собі номер орендаря Rno або номер об'єкта нерухомості Рпо не може бути використаний як потенційний ключ. Однак комбінація атрибутів Rno і Рпо ідентифікує не більше одного кортежу. Якщо допустити можливість того, що орендар може оглядати той самий об'єкт кілька разів, то до даного складеного ключа буде потрібно додати дату (Date). Однак у даному прикладі передбачається, що цього не потрібно.
Зверніть увагу на те, що будь-який конкретний набір кортежів відносини не можна використати для доказу того, що якийсь атрибут або комбінація атрибутів є потенційним ключем. Той факт, що в деякий момент часу не існує значень-дублікатів, зовсім не означає, що їх не може бути взагалі. Однак наявність значень-дублікатів у конкретному існуючому наборі кортежів цілком може бути використане для демонстрації того, що деяка комбінація атрибутів не може бути потенційним ключем. Для ідентифікації потенційного ключа потрібно знати зміст використовуваних атрибутів в "реальному світі", тільки це дозволить обґрунтовано ухвалити рішення щодо можливості існування значень-дублікатів. Тільки виходячи з подібної семантичної інформації можна гарантувати, що деяка комбінація атрибутів є потенційним ключем відносини. Наприклад, на підставі представлених на мал. 3.1 даних можна вирішити, що підходящим потенційним ключем для відношення Staff цілком може бути атрибут LName, що містить прізвище співробітника. Однак, хоча в цей момент в організації є тільки один співробітник із прізвищем White, але при зарахуванні в організацію нового співробітника із прізвищем White атрибут LName уже не можна буде використати як потенційний ключ.
Первинний ключ - це потенційний ключ, що обраний для унікальної ідентифікації кортежів усередині відношення.
Оскільки відношення не містить кортежів-дублікатів, завжди можна унікальним образом ідентифікувати кожний його рядок. Це значить, що відношення завжди має первинний ключ. У найгіршому разі вся множина атрибутів може використатися як первинний ключ, але звичайно, щоб розрізнити кортежі, досить використати трохи меншу підмножину атрибутів. Потенційні ключі, які не обрані як первинний ключ, називаються альтернативними ключами. Якщо у відношенні Branch вибрати як первинний ключ атрибут Впо, то альтернативними ключами цього відношення будуть атрибути Tel_No і Fax_No. У відношенні Viewing є тільки один потенційний ключ, що складається з атрибутів Rno і Рпо, тому дане сполучення атрибутів автоматично утворить його первинний ключ.
Зовнішній ключ – це атрибут або множина атрибутів усередині відношення, що відповідає потенційному ключу якогось (може бути, ті ж самого) відносини.
Якщо якийсь атрибут присутній у декількох відносинах, то його наявність звичайно відбиває певний зв'язок між кортежами цих відносин. Наприклад, атрибут Впо навмисно включений у відносини Branch і Staff для встановлення зв'язку між відомостями про відділення компанії й відомостями про співробітників, які працюють у кожному з відділень. У відношенні Branch атрибут Впо є первинним ключем, а у відношенні Staff він уведений для встановлення відповідності між відомостями про співробітників і відомостями про ті відділення компанії, у яких вони працюють. У відношенні Staff атрибут Впо є зовнішнім ключем. У такому випадку говорять, що атрибут Впо у відношенні Staff посилається на первинний ключ, тобто на атрибут Впо, у базовому відношенні Branch. (Базове відношення іноді називають цільовим відношенням)..