2011-02-28 59 views
1

我不是一個數據庫專家,所以請隨時讓我知道我完全錯了。我試圖創建一套具有以下基本規則的表格:數據庫綱要和提取信息

有公司,經理和員工。經理只能屬於一個公司,但員工可以屬於多個經理。我提出的表結構是這樣的:

# Companies 
    company_id 
    company_name 

# Managers 
    manager_id 
    company_id 

# Employees 
    employee_id 
    company_id 
    employee_name 

# Managed By 
    employee_id 
    manager_id 

這個結構看起來是否合理?我認爲我需要像「託管」這樣的東西,因爲員工可以有多個經理。

我現在很驚訝的是現在我該如何設法抓取我想要的記錄。例如:

  • 獲取屬於某個經理
  • 獲取屬於兩個特定經理
  • 所有員工在同一公司

編輯所有員工姓名所有員工姓名:我認爲我得到了這些查詢,但仍然感到不自在,所以對錶結構的任何幫助將不勝感激。

事實上,我在爲這些信息編寫查詢時遇到問題,這讓我覺得我在表結構上做了一些根本性的錯誤。希望這裏的某個人能幫我解決問題嗎?

回答

2

一般來說,該方案是正確的。然而,確實存在的一種可能性是,您可以獲得由兩家以上公司的經理管理員工的數據。

對於您的疑問:

select distinct Employees.employee_name as name from Employees, Managers, ManagedBy where Managers.manager_id = X and ManagedBy.manager_id = Managers.manager_id and Employees.employee_id = ManagedBy.employee_id; 

select distinct Employees.employee_name as name from Employees, Managers, ManagedBy where (Managers.manager_id = X or Managers.manager_id = Y) and ManagedBy.manager_id = Managers.manager_id and Employees.employee_id = ManagedBy.employee_id; 

,其中X和Y是你想要的經理的ID。

編輯:我知道你劃掉你想要的查詢,但第三個是這樣的:

select distinct Employees.employee_name as name from Employees where Employees.company_id = Z; 

其中Z是你想要的公司標識。

1

所有員工在同一公司

SELECT employee_id, employee_name, company_name 
FROM Employees 
LEFT JOIN Companies ON Employees.company_id = Companies.company_id 
WHERE Companies.company_id = ???? 
or if you pulling by name 
WHERE Companies.company_name = 'ABC' 

獲取屬於某個經理的所有僱員的姓名

SELECT employee_id, employee_name, manager_id 
FROM Employees 
LEFT JOIN Managed_By ON Employees.employee_id = Managed_By.employee_id 
WHERE Managed_By.manager_id = ???? 

MANAGER_NAME在管理表將是不錯的