Проектирование базы данных в mysql

Существует база данных, в которой есть таблицы: department, employee, calendar, event.

Немного расшифровки: существует рабочий, который работает в департаменте. У рабочего есть календарь на год (месяц и дни), каждый день в каждом месяце отмечается какое-либо событие (выходной, рабочий день, отпуск и тд). Это производственный календарь.

Нужно было спроектировать базу данных. Не совсем уверен, что правильно сделал, прошу помощи или хотя бы направления на правильный путь.

И еще вопрос: календарь в базе данных (месяцы и дни месяца) нужно заполнять вручную или можно как-то сделать это проще?

введите сюда описание изображения


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

Автор решения: Alex R.

К таблицам department, employee вопросов нет. Хранить в calendar отдельно месяц и день это двойной источник проблем (15 месяц, 45 день), лучше хранить дату, если нет возможности, то год и день.

По заданию выходит, что у вас счетное количество событий, значит для них должна быть отдельная таблица без привязки к чему либо

event
-----
idevent
event

Сам производственный календарь преобразуется

calendar
--------
idcalendar
caldate
idemploye
idevent 

Уникальный ключ по вашей задаче для этой таблицы должен быть caldate+idemploye.

По поводу заполнения таблицы calendar - стандарта нет. Можно заполнить для сотрудника на месяц событием по умолчанию.

Обычно календарь без привязки к сотруднику в БД хранят отдельно, чтобы указывать продолжительность каждого рабочего дня. Смысла ссылаться на такой календарь особо нет, т.к. всегда можно сделать связь по дате.

→ Ссылка