Разработка схемы базы данных для расписаний - PullRequest
2 голосов
/ 19 сентября 2010

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

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

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

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

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

1 Ответ

4 голосов
/ 19 сентября 2010

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

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

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

...