Помогите решить пару задачек по базам данных, пожалуйста

nata74

На предприятии есть отделы, в каждом отеделе есть рабочи группы, каждая рабочая группа иеет свой график работы и свой набор сотрудников, любой сотрудник может числиться в нескольких рабочих группах.
Задание:
1. Спроектировать информационную модель базы данных.
2. Написать запрос, который выбирает всех сотрудников из рабочих групп, принадлежащих определенному отделу.
3. Написать запрос, который выбирает все рабочие группы, у которых кол-во сотрудников > 10.
4. Написать запрос, который выбирает сотудников, которые числятся за несколькими рабочими группами.

a7137928

table Departments
fields: id (integer name (string)
table Workgroups
fields: id (integer name (string time_beg (time time_end (time department_id (integer)
table Employees
fields: id (integer name (string)
table Emp_groups
fields: emp_id, group_id (integers)
Запросы
2.
SELECT e.name, e.id FROM employees e
JOIN emp_groups eg ON eg.emp_id=e.id
JOIN workgroups w ON eg.group_id=w.id
JOIN departments d ON w.department_id=d.id
WHERE d.name = "Department_in_query"
GROUP BY e.id
ORDER BY e.name
3.
SELECT w.name, w.id, count (e.id) FROM workgroups w
JOIN emp_groups eg ON eg.group_id=w.id
JOIN employees e ON eg.emp_id=e.id
GROUP BY w.id
HAVING count(e.id)>10
ORDER BY w.name
4.
SELECT e.name, e.id, count (w.id) FROM employees e
JOIN emp_groups eg ON eg.emp_id=e.id
JOIN workgroups w ON eg.group_id=w.id
GROUP BY e.id
HAVING count(w.id)>1
ORDER BY e.name
Как-то так.
Если кто напишет более простые/продвинутые/короткие/удобные/другие запросы для этой задачи - будет хорошо. Я только такие знаю.

sawylya

Имхо, в таблице Emp_groups у каждой связки тоже должен быть свой айдишник

Mausoleum

Ну я бы добавил, что в первых таблицах построен первичный ключ по полю id, указал бы все FK, коих до фига, а в таблице связок можно сделать PK по двум полям, если не нужно хранить историю. Если нужно (а на вид так было бы лучше то еще отдельный суррогатный первичный ключ, поля типа begin_date, end_date, ну и во все таблички однозначно поля типа delete_date default null, creation_date и т.п.

lena1978

и сделаем вьюшки, в которых только актуальные записи!

1853515

Ну я бы добавил, что в первых таблицах построен первичный ключ по полю id, указал бы все FK, коих до фига, а в таблице связок можно сделать PK по двум полям, если не нужно хранить историю. Если нужно (а на вид так было бы лучше то еще отдельный суррогатный первичный ключ, поля типа begin_date, end_date, ну и во все таблички однозначно поля типа delete_date default null, creation_date и т.п.

я б еще добавил таблицы
Emp_Falimilies, Emp_Parents и Emp_shopping_habits - на вид так было бы лучше
Оставить комментарий
Имя или ник:
Комментарий: