Проект схемы базы данных для расписаний

У меня есть две таблицы: Компании и Сотрудники.

У меня также есть таблица отношений Employs, которая содержит внешние ключи company_id, employee_id в качестве составного первичного ключа. Примечание: сотрудники могут работать в нескольких компаниях.

Я хотел бы иметь еще одну таблицу EmployeeSchedules, которая просто содержит расписания (company_id:integer,employee_id:integer,start_time:datetime, end_time:datetime) для сотрудников, работающих в компании. В конечном итоге это будет отображаться в каком-то виджете календаря.

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

Мне было интересно, будет ли лучший способ представить это на уровне базы данных или просто придерживаться проверки на уровне приложения? Например, если бы был способ связать pkey EmployeeSchedules (company_id,employee_id) с pkey Employs (company_id, employee_id). Любые другие рекомендации по дизайну приветствуются!


person joelmats    schedule 19.09.2010    source источник


Ответы (1)


Я бы переопределил схему и добавил еще одну таблицу:

Person(id, name)
Company(id);
Employee(id, companyId, personId);
Schedules(id, employeeId, startTime, endTime);

Это означает, что запись сотрудника может быть привязана только к одной компании. Однако у человека может быть несколько записей о сотрудниках. Все столбцы «id» уникальны и являются первичным ключом таблицы. «companyId» относится к первичному ключу таблицы компании и так далее.

person Thomas Mueller    schedule 19.09.2010