powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Интересное тестовое задание с разрабткой структуры MySQL
5 сообщений из 5, страница 1 из 1
Интересное тестовое задание с разрабткой структуры MySQL
    #33339290
Roman Post
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!

Потенциальный заказчик подкинул интересное тестовое задание на PHP+MySQL,я не прошу его решить за меня,но предлагаю обсудить возможную структуру базы.

Task: DB schema of a system which is currently working as follow.

Employees:- different levels/types of user in organisation like CEO, administrator, Manager, Supervisiors, workers etc etc

Departments
HR, IT, Health, Accounts etc etc

Each employee is working in multiple roles like user "ABC" is working manager as well as worker. It is also possible that manger of "ERT" dept and "SGY" can assign duty to worker "XYZ"

1 Please design a DB schema which handles this situation in a most efficient way. Please design most suitable and best way to handle all these activites. and also poplule some data in DB and design SQL queries which gives us following results

1.1 Show managers who are also reporting to other managers of other departments.

1.2 Show all employees who have more than 1 managers.

1.3 Show all employees who don't have any managers.

Я сделал следующую структуру:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
#
# Структура таблицы `departments`
#
CREATE TABLE `departments` (
  `dep_id` int( 11 ) NOT NULL auto_increment,
  `dep_title` varchar( 64 ) default NULL,
  PRIMARY KEY  (`dep_id`)
) TYPE=MyISAM AUTO_INCREMENT= 5  ;
# --------------------------------------------------------
#
# Структура таблицы `employees`
#
CREATE TABLE `employees` (
  `empl_id` int( 11 ) NOT NULL auto_increment,
  `empl_type_id` int( 11 ) NOT NULL default '0',
  `dep_id` int( 11 ) NOT NULL default '0',
  `empl_name` varchar( 64 ) default NULL,
  PRIMARY KEY  (`empl_id`,`empl_type_id`,`dep_id`)
) TYPE=MyISAM ROW_FORMAT=DYNAMIC AUTO_INCREMENT= 5  ;
# --------------------------------------------------------
#
# Структура таблицы `employees_type`
#
CREATE TABLE `employees_type` (
  `empl_type_id` int( 11 ) NOT NULL auto_increment,
  `empl_type_title` varchar( 64 ) NOT NULL default '',
  PRIMARY KEY  (`empl_type_id`),
  UNIQUE KEY `empl_type_id` (`empl_type_id`)
) TYPE=MyISAM AUTO_INCREMENT= 4  ;
# --------------------------------------------------------
#
# Структура таблицы `managers`
#
CREATE TABLE `managers` (
  `parent_id` int( 11 ) default NULL,
  `child_id` int( 11 ) default NULL
) TYPE=MyISAM;

Особую трудность как я думаю представляет организация сввязи между сотрудниками,была идея использовать древовидную структуру в таблице `employees`,однако ведь работник может управлятся несколькими менеджерами,поэтому поле parent_id я думаю не подходит,тогда решил создать промежуточную таблицу managers,но что то смущает.

Какие будут мысли?
...
Рейтинг: 0 / 0
Интересное тестовое задание с разрабткой структуры MySQL
    #33339347
Фотография panch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а размер таблиц какой планируется?
может индексов напихать еще надо?
...
Рейтинг: 0 / 0
Интересное тестовое задание с разрабткой структуры MySQL
    #33339433
Roman Post
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
panchа размер таблиц какой планируется?
может индексов напихать еще надо?
да индексы конечно нужны,ну вот что вы думаете для такой структуры каким будет SQL запрос для:

1.1 Show managers who are also reporting to other managers of other departments.
...
Рейтинг: 0 / 0
Интересное тестовое задание с разрабткой структуры MySQL
    #33340003
Фотография Валентин К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Post
Особую трудность как я думаю представляет организация сввязи между сотрудниками,была идея использовать древовидную структуру в таблице `employees`,однако ведь работник может управлятся несколькими менеджерами,поэтому поле parent_id я думаю не подходит,тогда решил создать промежуточную таблицу managers,но что то смущает.
Какие будут мысли?
А разве у 1-го менеджера 2 начальника?
Выполнение заданий и ШДС - разные штуки, как у нас так и у них :)
Думаю, что древовидный справочник можно делать, но по другим критериям.
Связи между сотрудниками могут быть определены заданиями.
Т.е. сам справочник сотрудников делать по отделам древовидно, а в справочнике разнесения ШДС уже разносить должности и иерархию сотрудников.
...
Рейтинг: 0 / 0
Интересное тестовое задание с разрабткой структуры MySQL
    #33378445
ShuraKh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
согласен с [Валентин К]

ИМХО таблица managers лишняя.

Все таки с точки зрения бизнес логики надо разделять административную иерархию которая практически всегда древовидна и фактическое распределение обязанностей.

авторEach employee is working in multiple roles like user "ABC" is working manager as well as worker.

Это говорит о том что у всех пользователей могут быть разные роли т.е. они различны по функциональным обязанностям. Т.е. каждый Employee может иметь в ходить в группу менеджеров и одновременно в группу рабочих.

авторIt is also possible that manger of "ERT" dept and "SGY" can assign duty to worker "XYZ"

Тут фактически описываются взаимоотношения административных сущностей ("Отделы") и функциональных ("workers") по отношению к определенным действиям ("duty"). Какие могут быть эти "дьюти"? могут быть разными.

Таки образом имеем таблицы "Отделы" (со ссылкой на руководителя), "Пользователи (со ссылкой на отдел)", "Группы пользователей (типы)", "Действия". Каждая группа имеет права на выполнение определенных действий из тех что им назначенны и т.д...


Основной смысл в разделении фйнкциональной и административной иерархий. причем вторая может не быть древовидной.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Интересное тестовое задание с разрабткой структуры MySQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]