День добрый. Не могу никак правильно спроектировать БД для такой вот задачки: Сначала сделал БД с 2мя таблицами: employees(id/fio/position_id/date/slary) & position(id/number/description) и связь для (employee.position_id => position.number) - *многие к одному. Но для организации вывода списка смотрю такой подход не годиться... Путаюсь в мыслях, и есть идея сделать ещё 3ю таблицу промежуточную - employee2position (но не знаю какие поля задать). Посоветуйте какой подход будет толковым, БД на 2 или 3 таблицы? Вернуться к началу
Да тебе и не надо выводить начальника. Перечитай требования, которые сам же в первом посте опубликовал. Там упоминается, что у раба может быть только один надзиратель, но при перечислении полей хранения - насяйника уехаланама кудата.
@lunberg88, 2 или 3 таблицы выбираются по типу связи. Если Вам удалось организовать связь 1:М, то 3-я таблица не нужна. А если у вас 1 сотрудник может занимать более 1й должности, то это уже связь М:М - тогда нужна промежуточная таблица, где будет сохранена связь между ключами из первой и второй таблицы. Т.е. поля id, employe_id, position_id Если в эту таблицу добавить еще два поля - дату вступления в должность и ее освобождение - это уже будет отдельная сущность (период работы). Тогда даже при связи 1:М между первыми двумя таблицами нужно создавать 3ю и разрывать существующую связь.
@Maputo, Нет, у каждого рабочего может быть только один начальник. @Ganzal, вот из первого поста: В дальнейшем нужно будет сделать страничку с выводом списка сотрудников компании (с полями): фио/должность/дата/оклад/начальник.
Я уже и сам блин запутался, такая каша... Вообщем примерно как условие выглядит: Вот исходя из этого списка задач и возник вопрос, какой подход лучше сделать, организовать на 2 или 3 таблицы БД.
Вообщем на SF3 с доктриной(DQL) получилось сделать так: PHP: SELECT e.id, e.fio, e.salary, e.positionId, e.date, p.name, p.parentId, (SELECT ps.name FROM WorkBundle:Position ps WHERE p.parentId = ps.number) as parent FROM WorkBundle:Employee e JOIN WorkBundle:Position p WHERE e.positionId = p.number ORDER BY p.id ASC Возможно это не правильно, но пока такой результат и выводит именно как было нужно (то есть в колонке: "начальник" выводит руководящую должность текущей).