0

在MS SQL中,我擁有員工和部門表。我需要重新編制表格,以便讓我分配部門經理。員工,部門和ManagerID表結構

下面是現有的表:

Employee 
--------- 
emp_id 
emp_name 
emp_email 
Dept_id 


Departments 
----------- 
Dept_id 
Dept_name 

我的規則如下:

  • 一個部門經理是一個現有的員工誰已經是在emp 表。
  • 員工只能分配到一個部門。
  • 部門可能沒有經理。

我需要添加哪些新字段和約束條件?

知道經理是我指示的僱員。 可以使用什麼SQL Query列出部門經理分配的所有部門的部門名稱,管理員名稱,經理 - 分機,經理 - 電子郵件?

感謝

回答

0

你可以添加第三個表:

DepartmentManagers 
----------- 
Dept_id 
emp_id 

當然,你有你提那些其他領域,或者如果你要那也加入到Employee表數據(擴展名等),或者如果您不需要非管理人員,則可將其添加到DepartmentManage表中。部門名稱將在隨後邏輯上屬於你可能喜歡的東西(pseudoSQL)進行查詢:

SELECT E.emp_name, E.email, E.extension, E.email, D.Dept_name FROM EMPLOYEE E, DEPARTMENTS D, DEPARTMENTMANAGERS M WHERE E.emp_id = M.emp_id AND D.Dept_id = M.Dept_id 

另一種選擇是一個「IsManager的」字段添加到Employee表;在這種情況下,你不需要第三張表。

那麼查詢會更喜歡(pseudoSQL,特別是因爲有可能不是一個boolen類型,你可能需要使用1而不是TRUE):

SELECT E.emp_name, E.email, E.extension, E.email, D.Dept_name FROM EMPLOYEE E, Departments D WHERE E.Dept_id = D.Dept_id AND E.IsManager = TRUE 
+1

這看起來整潔。我只是這樣做,它很好地工作。謝謝 你能幫助我嗎?如何創建一個確保新表中存在新記錄(ID)的表(Emp)和(Dept)。 – DevNet

+0

您可以通過以下兩種方式之一強制執行RI(引用完整性):通過在DepartmentManagers表中將Dept_id和_emp_Id指向另外兩個表中的主鍵,或者您可以通過聲明方式一個用於DepartmentManagers表的SP(存儲過程),特別是OnInsert SP的SP(存儲過程),它將在執行插入操作之前驗證各個表中存在的值。 –

+0

除了檢查要插入的ID是否存在於它們各自的表中之外,還可能需要檢查它們是否不存在於DepartmentManagers表中(除非要允許每個部門有多個管理器)。你可以通過聲明唯一ID來做到這一點。 –

相關問題