Связи между таблицами
В БД имеется: Таблица календарь: (День,Месяц,Год) Таблица Статус:(работает,в отпуске,выходной)
Таблица Сотрудник: (Имя,фамилия,сколько лет)
Как правильно составить таблицу календарь,чтобы допустим 2 сотрудника ссылаются на один и тот же день,но у одного он рабочий,у другого - выходной. У меня получается так что в таблице Календарь 2 строки одного и того же дня но с разным статусом. Т.е. если у нас 3 статуса,3 сотрудника и один день-у нас таблица Календарь забивается уже 9 строками,что очень много,есть другие,более правильные варианты ?
Ответы (2 шт):
Я так понимаю что вы хотите составить табель дежурства. да так что в одно и тоже время работал один сотрудник остальные были либо в отпуске на больничном либо на выходном. Задача составить на будущее таблицу это к динамическому программированию. Если Вам известно кто и когда работал/отдыхал то это вопрос составления запроса.
Таблица календарь будет иметь различные варианты для каждого сотрудника.
Календарь дней сотрудника 1 ....
Объединят в одну нужно по какому либо статусу.
Календарь рабочих дней сотрудников .... Календарь выходных дней сотрудников .... Календарь отпускных дней сотрудников ....
если вздумаете объединить то у Вас получится как в Вашем примере 3х3
Как получить статус работника по дате? Вам необходимо построить запрос на основе трех таблиц.
Таблица 1. Сотрудники:
Столбцы: ID - идентификатор (обязательный ключ), ФИО - ФИО сотрудника.
Таблица 2. Статус:
Столбцы: ID - идентификатор (обязательный ключ), Статус - Статус сотрудника.
Таблица 3. Календарь:
Столбцы: ID - идентификатор (обязательный ключ), Дата, ФИО (из таблицы 1), Статус (из таблицы 2).
Запрос:
Дата (из таблицы 3), Статус (из таблицы 3), ФИО (из таблицы 3).
По-другому никак. Общая таблица из которой берутся данные для запроса - должна быть. Из Таблицы Календарь в запросе будут выведены только выбранные вами данные - по Дате, Статусу и ФИО сотрудника (по всем трем столбцам).
Соответственно, если вы хотите получить данные по статусу, то нужно создать несколько запросов. Если нужно вывести по трем статусам, значит должно быть три запроса с разным значением статуса. Если по дате - значит в запросе необходимо указать значение даты.