Mô hình dữ liệu quan hệ – khóa và các đặc tính của quan hệ

relation-keys

Khóa quan hệ giúp cho chúng ta xác định được duy nhất một bộ trong một quan hệ dựa vào các giá trị của các thuộc tính của quan hệ này.

Khóa quan hệ

Các khái niệm khóa

Siêu khóa (super key) của một quan hệ là một thuộc tính hoặc một tập các thuộc tính dùng để xác định duy nhất một bộ của quan hệ này.

Một siêu khóa có thể chứa thêm một các thuộc tính mà chúng không cần thiết để xác định duy nhất một bộ. Một siêu khóa hiển nhiên của quan hệ là tập tất cả các thuộc tính của quan hệ này.

Khóa dự tuyển (candidate key) của một quan hệ là một siêu khóa $K$ mà không có một tập con thực sự bất kỳ $K’ \subset K$ lại là một siêu khóa. Khóa dự tuyển $K$ của quan hệ $r$ có hai đặc điểm sau:

  • Tính duy nhất (uniqueness): các giá trị của $K$ trong các bộ của $r$ là duy nhất (không trùng nhau)
  • Tính tối giản (irreducibility): không có một tập con thực sự bất kỳ $K’ \subset K$ lại có tính duy nhất

Một quan hệ bất kỳ phải có ít nhất một khóa dự tuyển và có thể có nhiều khóa dự tuyển. Nếu không có tập con các thuộc tính nào là khóa dự tuyển thì tập tất cả các thuộc tính của quan hệ này phải là khóa dự tuyển, bởi vì quan hệ không thể có các bộ trùng nhau.

Thuộc tính khóa (key attribute, prime attribute) là một thuộc tính tham gia vào khóa dự tuyển, tên của thuộc tính khóa được gạch dưới.

Thuộc tính không khóa (non-key attribute) là một thuộc tính không tham gia vào khóa dự tuyển. Tên của thuộc tính không khóa không được gạch dưới.

Khóa phức hợp (composite key) là một khóa có nhiều hơn một thuộc tính.

Khóa chính (primary key) là một khóa dự tuyển được chọn để xác định duy nhất một bộ của quan hệ. Khóa chính có thể chỉ có một hoặc có nhiều thuộc tính. Một quan hệ chỉ có duy nhất 1 khóa chính, các khóa dự tuyển còn lại được gọi là các khóa khác (alternate key). Các thuộc tính của khóa chính có tên được gạch dưới nét liền.

Khóa ngoại (foreign key) là một thuộc tính hoặc một tập thuộc tính của một quan hệ tương ứng với (tham chiếu đến) khóa dự tuyển của một quan hệ khác hoặc cùng quan hệ đang xét. Nếu một thuộc tính xuất hiện trong nhiều hơn 1 quan hệ, thì thông thường thuộc tính này biểu diễn mối liên kết giữa các bộ của nhiều quan hệ. Các thuộc tính của khóa ngoại có tên được gạch dưới nét đứt.

Khóa mượn (borrowed key) là một khóa dự tuyển có chứa khóa ngoại.

Khóa (key) của lược đồ quan hệ R có tập thuộc tính $U = \{A_1, A_2, …, A_m\}$ là một tập con $K = \{A_{j1}, A_{j2},…,A_{jn}\}$ với $j_1, j_2,…, j_n$ là các số nguyên phân biệt và nằm trong khoảng từ 1 đến $m$, phải thỏa mãn đồng thời 2 điều kiện sau:

  1. $\forall r(R), \forall t_1, t_2 \in r, \text{nếu } t_1 \neq t_2 \text{thì } t_1[K] \neq t_2[K]$
  2. Không tồn tại $K’ \subset K$ sao cho $K’$ thỏa mãn điều kiện (1)

Ví dụ các loại khóa

Xét các lược đồ quan hệ sau:

  • Employee (Emp_ID, Name, Dept_Name, Salary)
  • Training (Emp_ID, Course, Date_Completed)
  • Department (Dept_Name, Location, Fax)

Trong đó:

  • Emp_ID là khóa chính của lược đồ quan hệ Employee.
  • Dept_Name là khóa chính của lược đồ quan hệ Department.
  • Emp_ID và Course là một khóa phức hợp và cũng là khóa mượn.
  • Course là thuộc tính khóa của lược đồ quan hệ Training.
  • Location, Fax là các thuộc tính không khóa.
  • Dept_Name trong lược đồ quan hệ Employee là khóa ngoại, khóa này tham chiếu vào khóa chính của lược đồ quan hệ Department.

Xác định khóa

Để xác định khóa của một lược đồ quan hệ, chúng ta dựa vào thông tin ngữ ngữa (semantic information) của các thuộc tính của lược đồ quan hệ này và các mối quan hệ giữa các thuộc tính trong thế giới thực. Từ đó chúng ta xác định việc trùng lặp dữ liệu có thể xảy ra hay không. Mối quan hệ giữa các thuộc tính được thể hiện bằng một khái niệm được gọi là phụ thuộc hàm. Chúng ta có thể xác định tất cả các khóa của một lược đồ quan hệ từ tập các phụ thuộc hàm này.

Nếu một tập $K \subseteq U$ thỏa mãn điều kiện (1) thì $K$ là một siêu khóa của lược đồ quan hệ $R$, cho dù $K$ có thỏa mãn điều kiện (2) hay không. Một siêu khóa hiển nhiên của $R$ là $U$.

Các đặc tính của quan hệ

Một quan hệ có các đặc tính sau đây:

  1. Mỗi quan hệ phải có tên phân biệt nghĩa là 2 quan hệ khác nhau phải có tên khác nhau.
  2. Mỗi thành phần của một bộ chỉ chứa một giá trị nguyên tố (atomic value), hoặc giá trị đơn (single value). Thuộc tính của quan hệ là thuộc tính đơn trị (single-valued attribute) mà không được là thuộc tính đa trị (multivalued attribute) và thuộc tính phức hợp (composite attribute).
  3. Mỗi thuộc tính phải có tên phân biệt nghĩa là 2 thuộc tính của một quan hệ phải có tên khác nhau.
  4. Các giá trị của một thuộc tính phải thuộc cùng một miền trị.
  5. Thứ tự các thuộc tính là không quan trọng. Thay đổi thứ tự các thuộc tính không làm thay đổi ngữ ngữ nghĩa của quan hệ.
  6. Mỗi bộ phải phân biệt nghĩa là không tồn tại 2 bộ trùng nhau (giống nhau hoàn toàn).
  7. Thứ tự các bộ là không quan trọng (về mặt lý thuyết – trong thực tế nó có thể ảnh hưởng đến hiệu năng truy xuất).

Việc đặt tên (quan hệ, thuộc tính) nên theo quy tắc gợi nhớ, các từ trong tên được ngăn cách bởi dấu gạch dưới (underscore) và viết hoa ký tự đầu tiên.