Ok. Not storing null values makes a lot of sense now that you say it.
1) As I said in the other thread, I will make sure to put all patient data that will be stable (sex, dob, ...) across the study in the main patient table (tbl_Patient), all the rest (such as weight, waist size, bmi, etc.) in tbl_PatientClinicAdmin. I now understand this well.
2) Can you define exactly what you mean by test area? In my field, that would mean that :
- Geriatric Depression Scale and Beck Depression Inventory are two different instruments that belong to the same area = depression measures.
- CVLT-II and Wechsler Memory Scale both measure the same area = memory measures.
Is that what you meant?
3) Regarding your model
- Each TestArea can have 1 or more test = correct!
- One Test can only be related to one test Area = correct!
- Each test has one or more questions = correct!
- Each question is uniquely identified in a test = correct! (let's use the look-up table approach for that)
- The questions in a test won't change during the study = normally correct, but I am now convinced that I will make a lookup table to "futureproof" my database. Sorry about changing my mind.
- Each patient has info that spans across study and this is store in patient= correct!
- Some patient info may change across visits and this will be stored in PatientClinicAdmin = correct!
4) Now re: tbl_PatientTestALLEval
Each patient completes one or more tests/questionnaires at each visit = correct!
However, this is the only table that is confusing me a bit.
Given its attribute and its foreign keys to uniquely identify each rows of data, each PatientTestEvalID (PK) could correspond to :
A patient
#001
In a test_area
#depression
For atest_ID
#geriatricdepressionscale
For a set of questions (question_ID)
#15 items of the gds-15
At a given EvaluationDate
The responses of the patient to this set.
So that means, for one visit where patient #001 is administered all the 16 questionnaires, there would be 16 instances of PatientTestEvalID = 1,2,3,4,5....16 (ID could change depending on where the index is at)?
But If I want to extract all the questionnaires data for one specific patient at a specific time point, i.e. at T0, I have to find all PatientTestEvalID that corresponds to T0... that seems problematic, no?
Thanks!