Связи между таблицами

В БД имеется: Таблица календарь: (День,Месяц,Год) Таблица Статус:(работает,в отпуске,выходной)

Таблица Сотрудник: (Имя,фамилия,сколько лет)

Как правильно составить таблицу календарь,чтобы допустим 2 сотрудника ссылаются на один и тот же день,но у одного он рабочий,у другого - выходной. У меня получается так что в таблице Календарь 2 строки одного и того же дня но с разным статусом. Т.е. если у нас 3 статуса,3 сотрудника и один день-у нас таблица Календарь забивается уже 9 строками,что очень много,есть другие,более правильные варианты ?


Ответы (2 шт):

Автор решения: Aziz Umarov

Я так понимаю что вы хотите составить табель дежурства. да так что в одно и тоже время работал один сотрудник остальные были либо в отпуске на больничном либо на выходном. Задача составить на будущее таблицу это к динамическому программированию. Если Вам известно кто и когда работал/отдыхал то это вопрос составления запроса.

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

Календарь дней сотрудника 1 ....

Объединят в одну нужно по какому либо статусу.

Календарь рабочих дней сотрудников .... Календарь выходных дней сотрудников .... Календарь отпускных дней сотрудников ....

если вздумаете объединить то у Вас получится как в Вашем примере 3х3

→ Ссылка
Автор решения: Anastasia

Как получить статус работника по дате? Вам необходимо построить запрос на основе трех таблиц.

Таблица 1. Сотрудники:

Столбцы: ID - идентификатор (обязательный ключ), ФИО - ФИО сотрудника.

Таблица 2. Статус:

Столбцы: ID - идентификатор (обязательный ключ), Статус - Статус сотрудника.

Таблица 3. Календарь:

Столбцы: ID - идентификатор (обязательный ключ), Дата, ФИО (из таблицы 1), Статус (из таблицы 2).

Запрос:

Дата (из таблицы 3), Статус (из таблицы 3), ФИО (из таблицы 3).

По-другому никак. Общая таблица из которой берутся данные для запроса - должна быть. Из Таблицы Календарь в запросе будут выведены только выбранные вами данные - по Дате, Статусу и ФИО сотрудника (по всем трем столбцам).

Соответственно, если вы хотите получить данные по статусу, то нужно создать несколько запросов. Если нужно вывести по трем статусам, значит должно быть три запроса с разным значением статуса. Если по дате - значит в запросе необходимо указать значение даты.

→ Ссылка