【问题标题】:Database schema & pulling info数据库架构和拉取信息
【发布时间】:2011-02-28 12:18:04
【问题描述】:

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

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

# Companies
  company_id
  company_name

# Managers
  manager_id
  company_id

# Employees
  employee_id
  company_id
  employee_name

# Managed By
  employee_id
  manager_id

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

我现在很困惑的是如何设法获取我想要的记录。例如:

  • 获取属于某个经理的所有员工姓名
  • 获取属于两个特定经理的所有员工姓名
  • 同一公司的所有员工

编辑:我想我已经弄清楚了查询,但这仍然感觉很笨拙,因此我们将不胜感激有关表结构的任何帮助。

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

【问题讨论】:

    标签: mysql schema


    【解决方案1】:

    一般来说,这个方案是正确的。但是,确实存在的一种可能性是,您可能拥有一名员工由两个以上公司的经理管理的数据。

    对于您的查询:

    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。

    【讨论】:

      【解决方案2】:

      同一家公司的所有员工

      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 会很高兴

      【讨论】:

        猜你喜欢
        • 2018-08-20
        • 1970-01-01
        • 1970-01-01
        • 2013-05-17
        • 2010-10-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多