Có một thuật toán nổi tiếng để thực hiện việc này. Tôi không nhớ nó, nhưng tập thể dục dường như đủ đơn giản để không sử dụng nó.
Tôi nghĩ rằng đây là tất cả về transitivity:
CurrentKey = {A, B, C, D, E, F}
Bạn biết D xác định E và E xác định F. Do đó, D xác định F bởi transitivity. Như F không xác định bất cứ điều gì, chúng ta có thể loại bỏ nó và như E có thể được lấy từ D chúng ta có thể loại bỏ nó là tốt:
CurrentKey = {A, B, C, D}
như AB xác định C và C không xác định bất cứ điều gì chúng ta biết nó có thể' t là một phần của chìa khóa, vì vậy chúng tôi loại bỏ nó:
CurrentKey = {A, B, D}
cuối cùng chúng ta đã biết một quyết định D vì vậy chúng tôi có thể loại bỏ sau từ khóa:
CurrentKey = {A, B}
Nếu một khi bạn có chìa khóa có thể này, bạn có thể tạo lại tất cả các phụ thuộc chức năng es nó là chìa khóa có thể.
PS: Nếu bạn tình cờ có thuật toán tiện dụng, xin vui lòng gửi nó như tôi muốn được vui để học lại mà :)
Nguồn
2012-04-15 17:52:32
Tôi nghĩ rằng A và D tương đương 1-1 trong lược đồ. – RBarryYoung
Quá trình này không nhất thiết phải xác định khóa chính (một khóa). ("Khóa chính" đang trên đường trở thành chủ yếu là một khái niệm SQL, và không phải là một khái niệm quan hệ.) Quá trình này, được áp dụng một cách chính xác, sẽ cung cấp cho bạn một bộ * * các khóa ứng cử viên. Làm thế nào để chọn một khóa chính từ một tập hợp các khóa ứng cử viên không phải là một phần của quá trình. –
Có, bạn đã đúng. Quá trình này sẽ cung cấp cho bạn khóa ứng cử viên :)) – mrjasmin