First off, here's the list of fields in tblEmployees:
-ID - Most relationship linked to this.
-PromoCode - (similiar to an employee number)
-OldPromoCode - Old version we are phasing out (included since some jobs
will still refer to the reps Old code
-FirstName
-NickName
-MiddleName
-LastName
-Suffix
-HomeRegion - relationship to tblRegions
-PositionCategory - relationship to tblCategoryList
-PositionSubcategory - relationship to tblSubcategoryList
-StartDate
-TechNumber - reference number assigned by client for technicians
-SalesRepNumber - reference number assigned by client for any person who
completes sales (can include techs)
I think that the table is set up well, do you disagree?
I don't doubt that the reason I'm pushing the limit of relationship is that
I want to know who typed in the data. The term 'for stamping' means 'to
indicate who type the data in to the database'.
tblInstallOrder is in a one-to-many relationship with tblInstallDetails
(same with install tables, etc).
So, of course, I want to indicate which person Installed a certain order.
So, for instance, tblInstallOrders will have a field [Installer] related to
tblEmployees.ID (It's actually through a junction table since it's
many-to-many (more than one tech can be on an order) but for simplicity we'll
say just one tech.)
That part is no problem. Here's the problem. I want to know who typed in the
order. I also want to know who typed in any given sales detail (and who typed
various other data). (Once entered, an InstallDetail is locked except for
notes and a checkbox to indicate if that details is to be included in order.
Therefore, if there's an error, user unchecks original detail, and creates a
new one. Since Install Details indicate who entered it, we can then determine
where the error are occuring. ) This has been a significant problem for us,
which explains why we want to be able to track it.
Here's a brief overview of workflow. Tech installs job, writes various codes
on paperwork indicating work performed. Data Entry Rep then enters all job
info, including those codes (They are the 'InstallDetails'). Then, a manager
goes through and checks all their data entry. Next, it's on to the accounting
dept. which does a final check. What's being checked for is: Did the tech
code it correctly in the first place? Did the Data Entry person make an
error? Did the Manager actually check it? All of these things have been
persistent issues with our pre-database system. Very difficult to see, for
example, if Jim the Tech was constantly coding wrong, or if Jenny the Data
Enterer was consistently giving the Install Tech she has a crush on more
codes he doesn't deserve, or if Sam the Data Enterer is consistently making
mistakes, or if the manager who claims he checking is quite obviously not.
Any given InstallOrder will also have a pre-call (to ensure customer will be
home, a postcall to check on customer satisfaction, and possibly a Quality
Control check. All three of those are things we want to track who made the
calls, who did performed the QC, so all of those need relationships to
tblEmployees.ID.
So tblInstallOrders has a relationship to tblEmployees.ID, to represent who
did the Installation, one for who did the precall, one for who did the
postcall, one for who QC'd. tblInstallDetails also has a relationship to
tblEmployees.ID , as does tblToolCheckout, as does tblToolsLeased, as does
tblHRcomments, as does tblBonuses, as does etc.... Add that all up, and
there's more than 32!
There may well be a better way to track who entered what data, and if there
is, I'm all ears.