MÔ HÌNH CƠ SỞ DỮ LIỆU QUAN HỆ
2.1.6. Khóa – Siêu khóa – Khóa dự tuyển – Khóa chính – Khóa ngoạ
Có nhiều cách khác nhau để định nghĩa khóa:
Định nghĩa 2.1
Khóa của một quan hệ R là một hoặc một số thuộc tính của quan hệ có thể dùng để phân biệt hai bộ bất kỳ trong quan hệ.
Định nghĩa 2.2
Khóa của quan hệ R định nghĩa trên tập các thuộc tính U = A1… An là một tập con K U thỏa mãn các tính chất sau: với mọi bộ giá trị q1, q2 của R đều tồn tại một thuộc tính A K sao cho q1.A q2.A.
Điều này có nghĩa là không tồn tại hai bộ nào có giá trị bằng nhau trên mọi thuộc tính của K. Mở rộng phép chiếu của bộ lên tập thuộc tính K ta có thể viết q1.K q2.K. Như vậy mỗi giá trị của khóa K phải là xác định duy nhất trên quan hệ R.
Theo định nghĩa trên, nếu K‟ K U là khóa của quan hệ R thì K cũng là khóa của R, bởi vì q1.K‟ q2.K‟ thì cũng có q1.K q2.K. Như vậy trong quan hệ có thể có rất nhiều khóa.Việc xác định tất cả các khóa của một quan hệ là rất khó khăn.
Theo định nghĩa 2.2 khóa ở đây chưa phải là khóa nhỏ nhất. Chúng ta có thể định nghĩa khóa tốt hơn một cách hình thức như sau:
Định nghĩa 2.3: Khóa tối tiểu
K là khóa tối tiểu của quan hệ R nếu K là khóa của R và mọi K‟ là tập con thực sự của K đều không là khóa của R.
Nghĩa là K là tập con nhỏ nhất mà giá trị của nó có thể xác định duy nhất một bộ giá trị của quan hệ.
Chúng ta quy ước rằng từ nay về sau trong giáo trình này, khi nói đến khóa nếu không nói gì thêm có nghĩa là khóa theo định nghĩa 2.3.
Định nghĩa 2.4: Khoá dự tuyển(Candidate): Khóa của quan hệ theo định
nghĩa 2.3 được gọi là khóa dự tuyển và là khóa nội của quan hệ.
Trong các phần tiếp theo, nếu không có chú thích gì thêm, thì các khóa dự tuyển đều được gọi chung là các khóa.
Định nghĩa 2.5: Siêu khoá (Supper key): K là siêu khóa của quan hệ R nếu
K‟ K là một khóa của quan hệ. Một quan hệ R luôn luôn có ít nhất một siêu khóa và có thể có nhiều siêu khóa.
Ví dụ 2.6
Quan hệ LOPHOC (Malop, Tenlop, Nienkhoa, Sohocvien, Makhoa) Quan hệ LOPHOC có khóa là Malop và một số siêu khóa sau: K1 = { Malop, Tenlop}
K2 = { Malop, Tenlop, Sohocvien } K3 = { Malop, Sohocvien }
K4 = { Malop, Nienkhoa }
Ý nghĩa thực tế của khóa là dùng để nhận diện một bộ trong một quan hệ, nghĩa là, khi cần truy tìm một bộ q nào đó ta chỉ cần biết giá trị của thành phần khóa của q là đủ để dò tìm và hoàn toàn xác định được nó trong quan hệ.
Trong thực tế, đối với các loại thực thể tồn tại khách quan (ví dụ: sinh viên, giảng viên, nhân viên, hàng hóa, …) người thiết kế cơ sở dữ liệu thường gán thêm cho chúng một thuộc tính giả gọi là mã số để làm khóa chỉ định (ví dụ: mã số sinh viên, mã số giảng viên, mã số nhân viên, mã số hàng hóa, …). Trong khi đó, các lược đồ quan hệ biểu diễn cho sự trừu tượng hóa thường có khóa chỉ định là một tổ hợp của hai hay nhiều thuộc tính của nó.
Định nghĩa 2.6: Khoá chính (Primary key): Trong trường hợp lược đồ quan
hệ Q có nhiều khóa dự tuyển, khi cài đặt trên một hệ quản trị CSDL người sử dụng có thể chọn một trong số các khóa dự tuyển để tạo chỉ mục (Index) chi phối việc truy cập đến các bộ. Khi đó khóa dự tuyển này được gọi là khóa chính. Các khóa còn lại gọi là các khóa tương đương. Khóa chính chỉ thật sự có ý nghĩa trong quá trình khai thác cơ sở dữ liệu và xét trên phương diện lý thuyết, khóa chính hoàn toàn không có vai trò gì khác so với các khóa dự tuyển còn lại.
Ví dụ 2.7
KHOA (Makhoa, Tenkhoa)
LOPHOC (Malop, Tenlop, Nienkhoa, Sohocvien, Makhoa) MONHOC (Mamon, Tenmon, Sodvhoctrinh).
HOCVIEN (Mahocvien, Tenhocvien, Ngaysinh, Quequan, Malop). GIANGVIEN (Magiangvien, Tengiangvien, Caphocvi, Chuyennganh). KQUATHI (Mahocvien, Mamon, Lanthi, Ngaythi, Diemthi, Ghichu).
Định nghĩa 2.7: Khoá ngoại (Foreign key): Tập thuộc tính K là khoá ngoại
của một quan hệ R nếu K không là khóa chính của quan hệ R nhưng lại là khóa chính của một quan hệ khác.
Trong ví dụ 2.7 ta thấy Makhoa trong quan hệ LOPHOC là khóa ngoại vì nó là khóa chính của quan hệ KHOA.
Malop trong quan hệ HOCVIEN là khóa ngoại của quan hệ HOCVIEN vì nó là khóa chính của quan hệ LOPHOC.