I'm working on building a database to manage project assignments, and the one part that's giving me particular trouble is the assignment of job titles to employees with for each project they are working on.
Requirements
- An Employee can be on multiple Projects at a time
- A Project has multiple Employees on it
- A Project has multiple Job Titles
- An Employee works on a Project under exactly one of the Project's Job Titles
- Multiple Employees can work under the same Job Title in a Project
I'm not sure how to represent this using tables; every layout I come up with either makes it possible for an employee to work on a project under a job title from a different project, or they are able to work on the same project under two different job titles.
Example Diagrams
Basically, I have three tables:
Tables
- Projects
- Project Name (unique)
- Project ID
- Employees
- Employee Name (unique)
- Employee ID
- Job Titles
- Title
- Project ID (Title-ProjectID unique)
- Title ID
And then a cross-reference table, called Assignments. The two ways I have come up with so far for Assignments are as follows:
Example 1
- Assignments
- Employee ID
- Project ID (EmployeeID-ProjectID unique)
- Title ID (unique)
- AssignmentID
This way limits employees to one title per project, but allows them to use a title that doesn't belong to the project in the assignment.
Example 2
- Assignments
- Employee ID
- Title ID (EmployeeID-TitleID unique)
- AssignmentID
This way assigns employees to the project through the title, so it is impossible to assign someone to a project with an invalid title. However, this allows an employee to be assigned to the same project under multiple titles.
Again, the diagrams are available here: https://i.stack.imgur.com/U8C16.png
I know there must be a way to do this cleanly, but I haven't had any real formal training in database design and I can't find anything through my searches except how to make a many-to-many relationship, which isn't exactly what I need help with.
Thanks!
- EDIT 1
- Bolded Primary Key Fields (were underlined in diagram image, but hard to tell since they are the last fields)
- Added AssignmentID (Primary Key) to Assignments table in the question (was present in designs, forgot to include when creating question & diagram)
- EDIT 2
- Added missing requirement (5)
- Added headers for examples and requirements
- EDIT 3
- I have 10 rep now, so I can put up the diagram!
- EDIT 4
- Added identifiers for unique keys (individual unique keys identified in diagram, but I don't know how to do compound keys in DIA)