Как правильно построить БД

Темы, не касающиеся фреймворка, но относящиеся к программированию в целом.
Ответить
Аватара пользователя
lunberg88
Сообщения: 8
Зарегистрирован: 2017.03.29, 19:19

Как правильно построить БД

Сообщение lunberg88 »

День добрый.
Не могу никак правильно спроектировать БД для такой вот задачки:
В компании работают ~ 1000 людей, каждый рабочий (за исключением директора) имеет ровно одного начальника. О каждом сотруднике нужно хранить следующую инфу:
- ФИО
- должность
- дата приема на работу
- оклад

Что нужно сделать:
х) реализовать хранение списка сотрудников в базе данных.
х) создать страницу на которой реализовать вывод сотрудников в виде иерархического дерева (с указанием занимаемой должности).
х) заполнить базу данных случайно сгенерированными данными (минимум 1000 сотрудников, минимум 5 уровней иерархии).
х) реализовать возможность редактирования списка сотрудников (всех полей, в том числе изменения начальника) – т.е. стандартный функционал CRUD.
Сначала сделал БД с 2мя таблицами: employees(id/fio/position_id/date/slary) & position(id/number/description) и связь для (employee.position_id => position.number) - *многие к одному.
Но для организации вывода списка смотрю такой подход не годиться... Путаюсь в мыслях, и есть идея сделать ещё 3ю таблицу промежуточную - employee2position (но не знаю какие поля задать).

Посоветуйте какой подход будет толковым, БД на 2 или 3 таблицы?
Аватара пользователя
SiZE
Сообщения: 2817
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Как правильно построить БД

Сообщение SiZE »

Не вижу смысла усложнять. Для этой задачи достаточно полей boss_id и position_id.
Аватара пользователя
lunberg88
Сообщения: 8
Зарегистрирован: 2017.03.29, 19:19

Re: Как правильно построить БД

Сообщение lunberg88 »

SiZE писал(а): 2017.08.07, 16:25 Не вижу смысла усложнять. Для этой задачи достаточно полей boss_id и position_id.
Ну а как потом делать вывод на страницу (список работников) а при редактировании вывести поле начальник?
Это получается нужно делать sub-select в select'e ?
Кстати, я вывожу position.parent_id, но вместо id, мне нужно имя этой должности.
Аватара пользователя
SiZE
Сообщения: 2817
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Как правильно построить БД

Сообщение SiZE »

lunberg88 писал(а): 2017.08.07, 16:46 Ну а как потом делать вывод на страницу (список работников) а при редактировании вывести поле начальник?
Это получается нужно делать sub-select в select'e ?
Кстати, я вывожу position.parent_id, но вместо id, мне нужно имя этой должности.
Скажем так, все это сделать можно. Я за вас это делать не собираюсь. Пишите что делали, что не получилось, помогу. А готовые решения в разделе работа )))
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Re: Как правильно построить БД

Сообщение maleks »

Вот шаблоны для хранения деревьев в БД:
Adjacency List («список смежности»)
Materialized Path («материализованный путь»)
Nested Sets («вложенные множества»)
Closure Table («таблица связей»)

Для вашей задачи можно:
- использовать одну таблицу и любой из первых трех шаблонов.
Ответить