Схема базы данных и информация для извлечения - PullRequest
1 голос
/ 28 февраля 2011

Я далеко не эксперт по базам данных, поэтому, пожалуйста, не стесняйтесь, дайте мне знать, что я делаю это совершенно неправильно. Я пытаюсь создать набор таблиц, который имеет следующие основные правила:

Есть компании, менеджеры и сотрудники. Менеджеры могут принадлежать только одной компании, но сотрудники могут принадлежать более чем одному менеджеру. Структура таблицы, которую я придумал, выглядит примерно так:

# Companies
  company_id
  company_name

# Managers
  manager_id
  company_id

# Employees
  employee_id
  company_id
  employee_name

# Managed By
  employee_id
  manager_id

Эта структура кажется разумной? Я подумал, что мне нужно что-то вроде «Управляемый», поскольку у сотрудника может быть несколько менеджеров.

То, что я поражаюсь, - теперь, как мне удается захватить записи, которые я хотел бы. Например:

  • Получить все имена сотрудников, принадлежащих определенному менеджеру
  • Получить все имена сотрудников, принадлежащих двум определенным менеджерам
  • Все сотрудники в одной компании

edit: я думаю, что я выясняю запросы, но это все еще кажется неоправданным, поэтому любая помощь по структуре таблицы будет принята.

Тот факт, что у меня возникают проблемы при написании запросов для этой информации, заставляет меня думать, что я сделал что-то принципиально неправильное со структурой таблицы. Надеюсь, кто-то здесь может установить меня правильно?

Ответы [ 2 ]

2 голосов
/ 28 февраля 2011

В общем, схема правильная. Однако существует одна возможность: у вас могут быть данные, в которых сотрудник управляется менеджерами более чем двух компаний.

По вашим запросам:

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 - идентификаторы менеджера, которые вы хотите.

edit: я знаю, что вы перечеркнули нужные запросы, но третий - это:

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

где Z - ID нужной вам компании.

1 голос
/ 28 февраля 2011

Все сотрудники в одной компании

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 = ????

имя_управления в таблице менеджеров было бы неплохо иметь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...