I am currently in the process of rebuilding a database (from scratch) that I had created as an Access noob and is already in use. I have learned a lot over the last few months but I'm still fairly new and don't understand much of what Access is capable of, so bare with me.
I have been told that look up fields in tables are a no-no and that I need to use a join table to marry information from multiple tables. Trouble is, I have no idea how to do that. So, I've come to ask for some guidance/input into my new design.
Let me explain the purpose of my database and the objects I need to track and how they interact with each other so it will be easier to understand what I'm trying to do. This database is for the food service department of a school district with 600+ Employees that work 6 different programs across 94 Schools. Right now I have 3 main tables: tblEmployees, tblPrograms, tblSchools and 3 support (feeder) tables: tblBudgetCodes, tblSchedules, tblJobTitles. I already know that I'm going to have to create at least 3 join tables (1 for substitute area assignments, 1 for schedules and schools and at least 1 for employee assignments to programs/schools/job titles/budget codes).
Here is an overview of the information I need to track, relate and join.
tblEmployees:
EmpID
Contact info (last name, first, mi, address, phones, emails, DoB etc)
Job info (hiredate, status, staff type (principal, kitchen staff etc), contracted pay rates, payroll comments)
Certification information (2 types of certificates. Sanitation and TASN, effective dates, expiration dates for both)
Uniform Sizes (shirts, pants, shoes-tracking type, size and qty for all uniform pieces and comments)
Improvement Plans (employee reviews - plan date, number of issues, followup dates, continuation dates and close dates as well as comments)
Substitute information (letter of intent date, orientation date, training date, eval date, #of evals, #of no shows, want full time?, areas they can work (1-4 or all), and comments. I have been told to join the sub empids with the sub areas on a new table.
*I suspect that I'm going to be instructed to break down the employees table into a few other support tables and join them up using the EmpID or something. Ending up with:
tblEmpContact
tblEmpJobInfo
tblEmpCertifications
tblEmpUniforms
tblEmpImpPlan
tblEmpSubs
tblSchools:
basic information (campus #, name, type, address, phone, fax etc)
Area (1, 2, 3 or 4 for substitute assignments)
Health Inspection dates (x2 per year)
kitchen evaluations dates (x2 per year)
OnSite Review Date (x1 per year)
*Staff - comes from tblEmployees (LED, principal-x1, area supervisor-x1, custodial supervisor-x1 & kitchen staff-xmultiple job titles) - will have to be assigned via join table. The kitchen staff can change depending on the program. Each school has it's own set number of each kitchen staff job title (1 manager, 1 possible assistant manager, # 7hour cooks, # 6.5hour cooks, # 6hour, # 5hour etc). Some of the schools have a supper program and some have a summer school program and their assignments are very different and even have different pay rates.
tblPrograms:
Type [Contract, PM Snack, ASM program, Concessions, Tutoring (all of those being at normal reg/ot pay rates by employee), Manager Intern (differential reg/ot pay rate by employee), Summer School (Program specific pay rates)]
Sponsor
FundSource
StartDate
EndDate
Allocation
Enrolled
MonitoringDates (up to 3x per school year depending on the program)
*School (will need to be joined to tblSchools)
*BudgetCode Regular (from tblbudgetcodes)
*BudgetCode Overtime (from tblbudgetcodes)
*Each school has programs with their own sponsors, fund sources and monitoring dates number of allocated students and number of students enrolled. Not all schools will have all programs. Summer school has it's own pay rate (which I will have to add fields for somewhere I'm just not sure where) since it's outside the contracted school year (lead cooks at x/hr and Assistant cooks at x/hour). There needs to be a separate budget code for regular and OT as the code changes depending on which pay rate is being used. This will be used in reports that are printed for payroll later on.
tblBudgetcodes: will need to be joined with programs and schools and employees
codename
Fund
Function
Object (regular or overtime)
SubObject (program type)
Org (campus)
budgetyear
*It's important to note that the budget codes are unique and specific for each rate, program type and school. Currently I plan to leave the Org (campus) field blank on tblBudgetCodes to be filled in on the form with the schoolID. I then have tblPrograms looking up the budget codes in 2 fields (one for reg and one for OT). However, that creates 2 budget code tables (tblBudgetCodes and tblBudgetCodes_1) on the relationship page with both linking to tblPrograms and I'm not sure how that will work down the road so there may be a better way to do that and I'm just not thinking of it.
tblJobTitles: will need to be joined with schools, programs and employees
Title
Hours
JobCode
tblSchedules: will need to be joined to schools and programs
meal start time
meal end time
meal session
meal description
delivery method
I'm concerned about my users not assigning things correctly or more to the point, unassigning things correctly and ending up with multiple people being assigned to the same job when they try to move an employee from one job title or program or school to another. I have and can use an employee named "vacant" as a placeholder in an open job I'm just a bit overwhelmed with how to put this all together.
From here I'm at a complete loss how to join all this information correctly. Setting up how many of each job title are contracted for each school and which employee fills that slot. How to assign employees to the various non-contract jobs at each school (keeping in mind an employee can work contract at one and other program at another) while getting the right pay rates and budget codes assigned to each as well. Not to mention how to join up the bell schedules with the appropriate school and program. Also do I need a field in each table for a foreign key from another table if i'm not using the look ups in the tables themselves and instead assigning things in a join table? That may be where the majority of my confusion comes from. For example...on tblPrograms do I need a field for the school, if I'm going to just join them up on another table entirely?