2010-09-19 20 views
1

J'ai deux tableaux: Entreprises et employés.Conception de schémas de base de données pour les horaires

J'ai également une table de relations Employs qui contient les clés étrangères company_id, employee_id en tant que clé primaire composite. Remarque: les employés peuvent travailler dans plusieurs entreprises.

Je voudrais avoir une autre table EmployeeSchedules qui contient simplement des planifications (company_id: integer, employee_id: nombre entier, start_time: datetime, end_time: datetime) pour les employés travaillant dans une entreprise. Cela finira par être affiché dans un widget de calendrier de quelque sorte.

Cependant, avec cette conception, je devrais vérifier au niveau de l'application que l'employé travaille réellement dans l'entreprise avant d'ajouter un calendrier. Je me demandais s'il y aurait une meilleure façon de représenter cela au niveau de la base de données ou tout simplement de s'en tenir à la vérification au niveau de l'application? Par exemple, s'il existe un moyen de lier la clé p EmployeeSchedules (company_id, employee_id) avec la touche p Employes (company_id, employee_id). Toutes les autres recommandations de conception sont les bienvenues!

Répondre

3

Je re-définir le schéma, et ajouter une autre table:

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

Cela signifie un dossier de l'employé ne peut être lié à une seule entreprise. Une personne peut avoir plusieurs enregistrements d'employés cependant. Toutes les colonnes "id" sont uniques et sont la clé primaire de la table. "companyId" fait référence à la clé primaire de la table d'entreprise et ainsi de suite.

+0

Ahh, merci !! Exactement ce dont j'avais besoin. – joelmats