Database
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Database

Khóa ứng viên trong thiết kế cơ sở dữ liệu là gì?

Khóa ứng viên là một khái niệm quan trọng trong chuẩn hóa cơ sở dữ liệu. Đọc tiếp để tìm hiểu khóa ứng viên là gì và cách kiểm tra xem tập hợp các thuộc tính có phải là khóa ứng viên hay không.

Khóa ứng viên, cũng được gọi đơn giản là khóa, là một phần quan trọng của thiết kế cơ sở dữ liệu. Nó là nền tảng lý thuyết cho các khái niệm kỹ thuật như khóa chính và khóa thay thế (duy nhất). Mọi nhà thiết kế cơ sở dữ liệu nên biết cách xác định các khóa ứng viên và cách chọn khóa phù hợp cho bảng của họ.

Khái niệm về khóa ứng viên được giảng dạy trong tất cả các khóa học cơ sở dữ liệu của trường đại học như một phần của lý thuyết chuẩn hóa cơ sở dữ liệu. Các vấn đề phổ biến bạn sẽ gặp phải khi tìm hiểu về khóa ứng viên là xác minh xem một tập hợp thuộc tính nhất định có phải là khóa ứng viên hay không và tìm tất cả khóa ứng viên cho một mối quan hệ.

Hiểu các khóa ứng viên là quan trọng để hiểu các biểu mẫu bình thường trong bảng cơ sở dữ liệu. Kiến thức này sẽ giúp bạn nhớ các quy tắc cho các dạng thông thường phổ biến nhất.

Trong bài viết này, chúng tôi sẽ giải thích khái niệm khóa ứng viên bằng các thuật ngữ đơn giản. Ngoài ra, chúng tôi sẽ hướng dẫn bạn cách xác minh xem một tập hợp các thuộc tính có phải là khóa ứng viên hay không.

Thuật ngữ chuẩn hóa cơ sở dữ liệu cơ bản

Trước khi bạn đọc về khóa ứng viên, hãy đảm bảo rằng bạn đã quen thuộc với thuật ngữ chuẩn hóa cơ bản. Hãy xem xét ngắn gọn các điều khoản quan trọng nhất.

Một mối quan hệ là tên lý thuyết cho một bảng cơ sở dữ liệu. Một quan hệ (bảng) có một tên và bao gồm các thuộc tính (cột) được đặt tên.

Một phụ thuộc hàm trong một mối quan hệ ( A -> B ) cho bạn biết rằng bất cứ khi nào hai hàng có cùng giá trị cho tất cả các thuộc tính trong tập hợp A, chúng cũng sẽ có cùng giá trị cho tất cả các thuộc tính trong tập hợp B.

Bao đóng của một tập hợp các thuộc tính là tập hợp các thuộc tính có thể được xác định về mặt chức năng từ tập hợp này. Bạn có thể xem lại thuật toán để tính toán việc đóng các thuộc tính tại đây.

Siêu khóa

Về mặt không chính thức, khóa ứng viên là một tập hợp các thuộc tính xác định duy nhất một hàng.

Theo định nghĩa, khóa ứng viên là một siêu khóa tối thiểu. Vì vậy, điều này có nghĩa là gì? Một siêu khóa là một thuộc tính hoặc một tập hợp các thuộc tính sao cho phần đóng của nó là tất cả các thuộc tính trong mối quan hệ.

Hãy xem một số ví dụ. Ở đây, chúng ta có bảng CourseEditions. Nó lưu trữ thông tin về các phiên bản khóa học.

Mỗi năm, một khóa học nhất định có thể được giảng dạy bởi một giáo viên khác nhau, với một mức giá khác nhau và giới hạn số điểm khác nhau. Do đó, chúng tôi có các phụ thuộc chức năng sau:

  • id -> khóa học, năm, giáo viên, giá cả, điểm - ID xác định tất cả các thuộc tính khác
  • khóa học, năm -> id, giáo viên, giá cả, điểm - khóa học và năm xác định ID, giáo viên, giá cả và điểm.

CourseEditions

id khóa học năm giáo viên giá điểm
1 Cơ sở dữ liệu 2019 Chris Cape 100 45
2 Toán học 2019 Daniel Parr 80 34
3 Cơ sở dữ liệu 2020 Đồng hồ Jennifer 110 30

Các siêu khóa trong bảng này là gì? Đầu tiên, tất cả các thuộc tính tạo thành một superkey, do đó, tập hợp {id, course, year, teacher, price, spot} là một siêu chìa khóa. Hãy nhớ rằng tập hợp tất cả các thuộc tính là một siêu khóa trong tất cả các bảng.

Có siêu khóa nào nhỏ hơn trong bảng này không? Có, có. Bộ {id} là một siêu chìa khóa. Chúng ta có phụ thuộc hàm id -> khóa học, năm, giáo viên, giá cả, điểm và tất nhiên, chúng tôi có sự phụ thuộc tầm thường id -> id . Sau khi chúng tôi có id, chúng ta có thể xác định tất cả các thuộc tính khác từ các phụ thuộc hàm.

Bộ {course, year} cũng là một superkey. Chúng tôi có phụ thuộc hàm khóa học, năm -> id, giáo viên, giá, điểm và chúng tôi có các phụ thuộc hàm tầm thường khóa học -> khóa học năm -> năm . Sau khi chúng tôi có khóa học năm , chúng tôi có thể xác định tất cả các thuộc tính khác từ các phụ thuộc hàm.

Tập hợp {id, course, year, teacher} cũng là một superkey. Chúng tôi có id , khóa học năm . Vì vậy, chúng tôi có thể xác định tất cả các thuộc tính khác trong bảng bằng ba thuộc tính này.

Mặt khác, bộ {giáo viên} không phải là một superkey. Nếu chúng ta biết giáo viên, chúng tôi không thể xác định bất kỳ thuộc tính nào khác ngoài giáo viên. Bộ {teacher, price} cũng không phải là một superkey. Một khi chúng tôi có giáo viên giá , chúng tôi không thể xác định thêm bất kỳ thuộc tính nào.

Siêu khóa tối thiểu

Không phải tất cả các siêu khóa đều là khóa ứng viên. Để trở thành khóa ứng viên, superkey phải tối thiểu có nghĩa là nếu bạn loại bỏ bất kỳ thuộc tính nào khỏi nó, nó sẽ không còn là superkey nữa. Hãy xem một số ví dụ.

Bộ {id} là một siêu chìa khóa, và nó là tối thiểu. Bạn không thể loại bỏ các thuộc tính khỏi nó, vì khi đó bạn sẽ có một tập hợp trống và tập hợp trống không phải là siêu khóa. Do đó, bộ {id} là một khóa ứng viên.

Bộ {course, year} cũng là một siêu khóa và một khóa ứng viên. Nếu bạn loại bỏ bất kỳ thuộc tính nào khỏi nó, tập hợp còn lại không còn là siêu khóa nữa. Bạn cần cả khóa học năm để xác định các thuộc tính khác trong tập hợp.

Tuy nhiên, bộ {id, course, year, teacher} là một siêu khóa nhưng không phải là một khóa ứng viên. Ví dụ:nếu bạn xóa thuộc tính giáo viên, bộ còn lại vẫn là superkey. Trên thực tế, trong trường hợp này, bạn có thể xóa bất kỳ thuộc tính nào khỏi {id, course, year, teacher} và tập hợp còn lại sẽ vẫn là một siêu khóa.

Lưu ý rằng siêu khóa tối thiểu không có nghĩa là siêu khóa có số phần tử nhỏ nhất. Cả {id} {khóa học, năm} là các khóa ứng viên mặc dù chúng có một số phần tử khác nhau.

Thuật toán:Xác minh rằng một tập hợp các thuộc tính là một khóa ứng viên

Đây là vấn đề thiết kế cơ sở dữ liệu phổ biến:làm cách nào để xác minh xem một tập thuộc tính có phải là khóa ứng viên hay không?

Đây là thuật toán để xác minh điều đó:

  • Bước 1:Kiểm tra xem tập hợp đã cho có phải là siêu khóa hay không. Tính toán việc đóng các thuộc tính trong tập hợp. Nếu bao đóng là tập hợp tất cả các thuộc tính thì tập đó là siêu khóa.
  • Bước 2:Kiểm tra xem superkey có nhỏ nhất không. Xóa từng thuộc tính, từng thuộc tính một. Nếu tập hợp còn lại là siêu khóa thì siêu khóa không phải là tối thiểu và tập hợp không phải là khóa ứng viên. Nếu bạn không thể xóa bất kỳ thuộc tính nào và giữ lại thuộc tính superkey thì tập hợp đó là khóa ứng viên.

Ví dụ:hãy kiểm tra xem bộ {course, year} thực sự là một khóa ứng viên.

  • Bước 1:Hãy tính toán kết thúc của {khóa học, năm}. Sử dụng thuật toán đóng, chúng tôi kết luận rằng đóng thực sự là {id, course, year, teacher, price, spot}. Do đó, bộ {course, year} thực sự là một siêu chìa khóa.
  • Bước 2. Hãy thử xóa khóa học từ bộ. Chúng tôi còn lại với bộ {year}. Không có phụ thuộc hàm chỉ với năm như phía bên trái. Do đó, tập hợp này bị đóng là {year} . Tương tự, khi chúng tôi xóa thuộc tính năm, phần đóng của tập hợp còn lại là {course}. Không {year} cũng không phải {khóa học} là siêu khóa, vì vậy bộ {course, year} là một siêu khóa tối thiểu và do đó, một khóa ứng viên.

Nếu bạn thích bài viết này, hãy xem các bài viết chuẩn hóa khác trên blog của chúng tôi.

Nếu bạn là sinh viên tham gia các lớp học về cơ sở dữ liệu, hãy đảm bảo tạo Tài khoản Học thuật miễn phí trong Vertabelo, công cụ vẽ sơ đồ ER trực tuyến của chúng tôi. Nó cho phép bạn vẽ sơ đồ ER vật lý và logic trực tiếp trong trình duyệt của mình.

Vertabelo hỗ trợ PostgreSQL, SQL Server, Oracle, MySQL, Google BigQuery, Amazon Redshift và các cơ sở dữ liệu quan hệ khác. Hãy dùng thử và xem việc bắt đầu dễ dàng như thế nào!


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ĐẶT HÀNG SQL THEO:5 Điều Nên và Không nên để Sắp xếp Dữ liệu Giống như một Chuyên gia

  2. Quản trị bảo mật dữ liệu

  3. Bộ xử lý AMD EPYC trong Máy ảo Azure

  4. Sự kiện mở rộng cho SSAS

  5. Đừng chỉ tạo ra những chỉ mục bị thiếu một cách mù quáng!