数据库架构&拉信息

时间:2011-02-28 04:01:28

标签: mysql schema

我远不是数据库专家,所以请随时告诉我,我做错了。我正在尝试创建一组具有以下基本规则的表:

有公司,经理和员工。经理只能属于一家公司,但员工可以属于一个以上的经理。我提出的表结构是这样的:

# Companies
  company_id
  company_name

# Managers
  manager_id
  company_id

# Employees
  employee_id
  company_id
  employee_name

# Managed By
  employee_id
  manager_id

这种结构看起来合理吗?我认为我需要像“管理者”之类的东西,因为员工可以有多个经理。

我现在感到难以置信的是如何设法抓住我想要的记录。例如:

    <击>
  • 获取属于特定经理的所有员工姓名
  • 获取属于两个特定经理的所有员工姓名
  • 所有员工到同一家公司

编辑:我认为我已经弄清楚了这些问题,但这仍然感觉不合适,所以对表格结构的任何帮助都会受到赞赏。

我在为这些信息编写查询时遇到问题,这让我觉得我已经对表结构做了一些根本性的错误。希望有人能帮到我吗?

2 个答案:

答案 0 :(得分: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是您想要的公司ID。

答案 1 :(得分: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 = ????
拥有

的Managers表中的

manager_name很不错

相关问题