View Single Post
  #6  
Old November 17th, 2008, 03:38 PM posted to microsoft.public.access.tablesdbdesign
tina
external usenet poster
 
Posts: 1,997
Default Serial one-to-many tables

HIPAA compliance.

oops! i can't believe i screwed that up (i've taken classes that include
HIPAA information) and of course my acronym was *wrong*!! smacks self
upside the head

as for the table design and suggested form/subforms setup, yeah, it's a lot
to take in. if the structure has you a bit stumped, a refresher on
relational design principles will probably clear it up, see
http://www.accessmvp.com/JConrad/acc...abaseDesign101
for links to resources.

if it's the form/subform setup that's hard to visualize, let me know what
version of Access you're working with; maybe i can whip up a demo db for
you.

hth


"CuriousMark" wrote in message
...
Wow. Thanks very much tina. I'll have to print this out and work through

it a
bit. I'm not exactly a novice at Access, but not experienced enough to
understand your answer on the first read . Thanks also for the advice on
HIPAA compliance. It is an issue and has been taken into account on

several
levels.

"tina" wrote:

well, you're on the right track. i'd add a few supporting tables, and
rearrange a couple of the others a bit, as

tblPatients
PatientID (primary key)
LastName
FirstName
okay so far, except note that i changed the table name and primary key
fieldname, to be more descriptive. keep in mind that Access is not a

secure
repository for sensitive data such as social security numbers; if you

need
to keep that sort of data, you should look at using a server-based

solution
such as SQLServer. also, your use of the word patients indicates human
medical data. if that's correct, and if you're in the USA, your data
storage/handling solution needs to be HIIPA-compliant; again, data

security
is an issue here.

tblProcedures
ProcedureID (pk)
ProcedureName
this would be a list of all procedures that you can perform, and

nothing
else. do NOT include any fields that indicate a specific person or a
specific performance of a procedure.

tblLocations
LocationID (pk)
LocationName
this would be a list of all locations where an instance of a procedure

may
be performed, and nothing else.

tblSamples
SampleID (pk)
SampleDescription
this would be a list of all possible sample descriptions - or names, if
that makes more sense to you - such as pass1, pass2, pass3, etc. and

nothing
else.

tblResults
ResultID (pk)
ResultDescription
this would be a list of all possible result descriptions - or names -

such
as pos, neg, non-diagnostic, etc. and nothing else.

tblPatientProcedures
PatProcID (pk)
PatientID (foreign key from tblPatients)
ProcedureID (fk from tblProcedures)
ProcedureDate

the table relationships a
tblPatients.PatientID 1:n tblPatientProcedures.PatientID
tblProcedures.ProcedureID 1:n tblPatientProcedures.ProcedureID
make sure you set the relationships in the Relationships window, and
enforce referential integrity.

tblPatProcLocations
ProcLocID (pk)
PatProcID (fk from tblPatientProcedures)
LocationID (fk from tblLocations)
Sequence

the relationship is:
tblPatientProcedures.PatProcID 1:n tblPatProcLocations.PatProcID
tblLocations.LocationID 1:n tblPatProcLocations.LocationID
ditto above re setting relationships.

tblLocSamples
LocSamID (pk)
ProcLocID (fk from tblPatProcLocations)
SampleID (fk from tblSamples)
ResultID (fk from tblResults)

the relationships would be:
tblPatProcLocations.ProcLocID 1:n tblLocSamples.ProcLocID
tblSamples.SampleID 1:n tblLocSamples.SampleID
tblResults.ResultID 1:n tblLocSamples.ResultID

exactly how you set up your data entry form is determined partly by the

work
flow, partly by the media that you'll be entering data from (i'm

assuming a
sheet of paper with data organized in a particular order), and partly on
your skill level. the work flow you indicated below; and your skill

level
can be increased to meet your development needs - trust me, it can

the
source media we can't see, so you'll have to use your best judgment on
making the form suit your needs there.

i might start with a mainform, bound to tblPatients. probably an unbound
combobox control in the form's Header section, RowSource: tblPatients,

to
select a particular patient record. perhaps a tab control, with the

patient
fields on the first page.

then a subform on the second page of the tab control, bound to
tblPatientProcedures, SingleForm view, with a combobox control bound to
field ProcedureID, RowSource: tblProcedures, to pick a procedure when

adding
a new record and display the procedure name of existing records.

then a 2nd level subform, bound to tblPatProcLocations, with a combobox
control bound to LocationID, RowSource: tblLocations, again to pick or
display a location. if i were using A2000 - A2003, i'd set the

DefaultView
of the level2 subform to Datasheet. then i'd add a level3 subform, bound

to
tblLocSamples, DefaultView also as Datasheet, with a combobox control

bound
to SampleID, RowSource: tblSamples, and another combobox bound to

ResultID,
RowSource: tblResults. (if you're using A2007, i don't know what options

may
be available; if you're using A97, a different method is needed - but

let's
not go there unless we have to.)

so you open the form, add a patient record or find an existing one in

the
combobox in the form Header. click on the 2nd tab, and add or go to a
procedure record (you can use an combobox here, too - or a listbox - to

find
a specific procedure record for the selected patient). then enter or go

to a
location record in the datasheet, and enter or edit sample records in

the
subdatasheet of each location record.

hth


"CuriousMark" wrote in message
...
I need help with design of a database I am writing to keep track of
procedures that I do on patients. For each patient, one or more

procedures
can be done. For each procedure, one or more locations can be sampled

(I
want
to keep track of the sequence of locations sampled, i.e. 1, loc2R; 2,

loc2L;
3, loc7; etc). For each location, one or more samples (pass1, pass2,

pass3,
etc.) can be taken. For each sample there is a result (pos, neg,
non-diagnostic).

I keep getting lost trying to create a form or sequence of forms that

will
enable me to enter all the data. It seems that I need a subform
(Location:Result) inside a subform (ProceduLocation) inside another
subform (Name:Procedure). On the highest level form (Name) I want to

be
able
to select from the existing names (shown as LastName & ", " &

FirstName)
or
enter a new name. Any help with fixing my database design would be

much
appreciated. Thanks.