Dependencies
對同一依賴項的多個功能依賴項
我正在尋找以下關係的 3NF 形式:
1. emp_no -> phone_no, office_no, dep_no, proj_no 2. emp_no, date -> job, salary 3. phone_no -> dep_no, office_no, area 4. proj_no -> dep_no, p_buject 5. dep_no -> mgr_emp_no, d_budget 6. mgr_emp_no -> dep_no
我只能將第一個依賴項導出到:
1. emp_no -> phone_no, office_no, proj_no
因為
proj_no
和phone_no
依賴於dep_no
。然後其餘的不可分解,因此它們被複製到我的工作表上。如您所見,5 和 6 相互依賴。我瀏覽了網際網路上的資源,我以前從未見過這樣的關係(相互依賴和父母)。如何使這些功能依賴於 3NF 格式?
要在 3NF 中引入模式,首先您必須找到依賴項的規範覆蓋。然後,您可以應用“分析”算法來找到 Boyce-Codd 範式(比 3NF 更嚴格),或者您可以應用“綜合”算法來找到 3NF。在這種情況下,兩種算法都給出相同的結果。
這是依賴項的規範封面:
date, emp_no → job date, emp_no → salary dep_no → d_budget dep_no → mgr_emp_no emp_no → phone_no emp_no → proj_no mgr_emp_no → dep_no phone_no → area phone_no → dep_no phone_no → office_no proj_no → dep_no proj_no → p_buject
讓我們用綜合算法找到 3NF。第一步是將canonical Cover的所有依賴關係與左側相同的部分收集在一起,即:
date, emp_no → job date, emp_no → salary dep_no → d_budget dep_no → mgr_emp_no emp_no → phone_no emp_no → proj_no mgr_emp_no → dep_no phone_no → area phone_no → dep_no phone_no → office_no proj_no → dep_no proj_no → p_buject
第二步為每個組創建一個關係,鍵由公共左側部分給出:
R1 (date, emp_no, job, salary) key: (date, emp_no) R2 (dep_no, d_budget, mgr_emp_no) key: (dep_no) R3 (emp_no, phone_no, proj_no) key: (emp_no) R4 (mgr_em_no, dep_no) key: (mgr_em_no) R5 (phone_no, area, dep_no, office_no) key: (phone_no) R6 (proj_no, dep_no, p_buject) key: (proj_no)
第三步刪除包含在另一個關係中的關係:在這種情況下,關係 R4 包含在 R2 中,因此刪除了 R4。
最後一步檢查是否有任何關係包含原始關係的鍵之一,如果不是,則添加具有其中一個鍵的新關係:因為原始關係(僅)具有鍵(日期,emp_no),並且關係 R1 包含它,不必添加新的關係。
所以 3NF 如下:
R1 (date, emp_no, job, salary) key: (date, emp_no) R2 (dep_no, d_budget, mgr_emp_no) keys: (dep_no), (mgr_em_no) R3 (emp_no, phone_no, proj_no) key: (emp_no) R5 (phone_no, area, dep_no, office_no) key: (phone_no) R6 (proj_no, dep_no, p_buject) key: (proj_no)
並從這些關係中推理,您可以推斷出它們中的每一個代表的實體以及指向其他關係的外鍵:
R1 represents the history of jobs of the employee, with key: (date, emp_no), and emp_no as FK R2 represents a department, which is identified by dep_no but also by the number of the manager (which is a FK for employees) R3 represents an employee, with key emp_no, with FKs phone_no and dep_no R5 represents the “place” of an employee, with key phone_no and FK dep_no R6 represents information about a project, with key proj_no and FK dep_no
最後,請注意依賴項 4 和 5,你稱之為“對同一依賴項的多個功能依賴”,實際上是特別的,因為它們在具有兩個主鍵的關係(部門)中轉換,即部門和部門經理的編號。這是由第三步中的算法通過合併先前獲得的兩個關係來管理的(因此該關係有兩個主鍵)。