2012-04-15 27 views
5

Tôi cần một số trợ giúp và nguyên tắc.Cách lấy khóa tối thiểu từ các phụ thuộc chức năng?

Tôi có mối quan hệ sau: R = {A, B, C, D, E, F} và tập các phụ thuộc hàm

 
F = { 
    {AB -> C}; 
    {A -> D}; 
    {D -> AE}; 
    {E -> F}; 
} 

khóa chính cho R là gì?

Nếu tôi áp dụng quy tắc suy luận tôi nhận được các phụ thuộc hàm thêm:

D -> A 
D -> E 
D -> F 

D -> AEF 

A -> E 
A -> F 
A -> DEF 

Làm thế nào để tiếp tục không?

+1

Tôi nghĩ rằng A và D tương đương 1-1 trong lược đồ. – RBarryYoung

+2

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. –

+0

Có, bạn đã đúng. Quá trình này sẽ cung cấp cho bạn khóa ứng cử viên :)) – mrjasmin

Trả lời

5

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à :)

+0

Cảm ơn bạn rất nhiều :) Tôi chưa nghe về bất kỳ thuật toán nào tôi chỉ biết một số quy tắc suy luận có thể được sử dụng để lấy các phụ thuộc chức năng mới :)) – mrjasmin

+0

@ user1285737 Không cần cảm ơn , đó là những gì chấp nhận câu trả lời là có cho :) Dù sao, có một thuật toán sẽ giúp bạn có được kết quả đúng bất kể sự phức tạp của các mối quan hệ và phụ thuộc chức năng. Tôi muốn tôi có thể nhớ nó: '( –

+0

hehe tôi cũng muốn học thuật toán: ((I – mrjasmin

-1

Thuật toán: tính toán chính (gọi với x = ∅)

procedure key(x;A;F) 
foreach ! B 2 F do 
if x and B 2 x and B ̸2 then 
return; /* x not minimal */ 
fi 
od 
if x+ = A then 
print x; /* found a minimal key x */ 
else 
X any element of A x+; 
key(x [ fXg;A;F); 
foreach ! X 2 F do 
key(x [ ;A;F); 
od 
fi 
Các vấn đề liên quan