Showing posts with label medical. Show all posts
Showing posts with label medical. Show all posts

Sunday, March 11, 2012

Data Modeling Question; Patients and Referrals

A medical office for which I'm designing a database receives many many
referrals from other doctors offices. A small subset of these referrals
become patients. These referals and patients must be represented in the new
database.
The data collected for referrals is minimal, while the data for patients is
extensive. The data collected for Referrals is a subset of the data
collected for patients.
One solution is to have one Patients table with a "Status" column that
indicates whether the person is a Referral or Patient. This scenario would
result in a bunch of nulls, and would make it difficult/impossible to impose
column level constraints for Patients but not Referrals.
But it seems that we really have two entities here - Referrals and Patients.
And given that (1) the amount of data and (2) the constraints imposed (e.g.,
not null) are very different; it might make sense to have two tables.
Two questions:
1. Which modeling solution makes more sense? One table or two? (or someting
else?)
2. For the two-table solution described above: What would we do when a
Referral becomes a Patient. Do we add the referral info to the Patients
table and delete it from the Referrals table (i.e., move their data between
tables)?
Thanks!Jordan S. wrote:
> A medical office for which I'm designing a database receives many many
> referrals from other doctors offices. A small subset of these referrals
> become patients. These referals and patients must be represented in the ne
w
> database.
> The data collected for referrals is minimal, while the data for patients i
s
> extensive. The data collected for Referrals is a subset of the data
> collected for patients.
> One solution is to have one Patients table with a "Status" column that
> indicates whether the person is a Referral or Patient. This scenario would
> result in a bunch of nulls, and would make it difficult/impossible to impo
se
> column level constraints for Patients but not Referrals.
> But it seems that we really have two entities here - Referrals and Patient
s.
> And given that (1) the amount of data and (2) the constraints imposed (e.g
.,
> not null) are very different; it might make sense to have two tables.
> Two questions:
> 1. Which modeling solution makes more sense? One table or two? (or sometin
g
> else?)
> 2. For the two-table solution described above: What would we do when a
> Referral becomes a Patient. Do we add the referral info to the Patients
> table and delete it from the Referrals table (i.e., move their data betwee
n
> tables)?
> Thanks!
1. Two.
2. No. Each non-key attribute should appear in one place only - either
in the Patients table or the Referrals table but not both. Only the key
needs to be in both tables.
David Portas, SQL Server MVP
Whenever possible please post enough code to reproduce your problem.
Including CREATE TABLE and INSERT statements usually helps.
State what version of SQL Server you are using and specify the content
of any error messages.
SQL Server Books Online:
http://msdn2.microsoft.com/library/ms130214(en-US,SQL.90).aspx
--|||> Referral becomes a Patient. Do we add the referral info to the Patients
> table and delete it from the Referrals table (i.e., move their data betwee
n
> tables)?
That would depend on what the business needs. Do you need to store the
original referral exactly as it came? For instance, suppose Jane Doe
gets a referral when she is 2 days shy of her 18th birthday, still
technically a minor, and gets to your office a w later, when she is
already an adult?|||"David Portas" <REMOVE_BEFORE_REPLYING_dportas@.acm.org> wrote in message
news:1150489639.272044.160730@.p79g2000cwp.googlegroups.com...
> Jordan S. wrote:
> 1. Two.
> 2. No. Each non-key attribute should appear in one place only - either
> in the Patients table or the Referrals table but not both. Only the key
> needs to be in both tables.
>
I agree that these should be separate. And the Patient table should have a
foreign key reference to the Referral table.
However, a Patient and a Referral can and probably should have "redundant"
data. It's patently absurd to store a Patient's name only on her related
Referral. A Patient has a Name, a Referral has a Name, but they are not
necessarily the same. And there may be Patients without Referrals. The
entities are related through business processes. This is a loose kind of
entity relationsihip, not an "is a" relationship.
This pattern happens a lot, where one entity becomes a different entity
through a business process process: a Proposal becomes a Contract, a Lead
becomes a Sale, or an Order becomes a Shipment. In general, when the new
entity is created it should have attributes copied from the old entity, and
a reference back to the old entity.
David|||David Browne wrote:
> It's patently absurd to store a Patient's name only on her related
> Referral.
Maybe the name of the table seems inappropriate somehow. That's easily
fixed. The idea of recording a patient's name only once isn't absurd at
all.

> A Patient has a Name, a Referral has a Name, but they are not
> necessarily the same.
Possibly. But then they are *different* attributes (the same person
entity can have both a Patient Name and a Referral Name). If that were
so then I would agree that they should appear in both tables. My
original advice still stands in that case because we are now talking
about *different* attributes.

> And there may be Patients without Referrals. The
> entities are related through business processes. This is a loose kind of
> entity relationsihip, not an "is a" relationship.
That's not an argument for redundancy though. In that case I would
create a third table for the common attributes.

> This pattern happens a lot, where one entity becomes a different entity
> through a business process process: a Proposal becomes a Contract, a Lead
> becomes a Sale, or an Order becomes a Shipment. In general, when the new
> entity is created it should have attributes copied from the old entity, an
d
> a reference back to the old entity.
I'd argue very strongly against "in general". What you have described
creates redundancy and the potential for anomaly. If an attribute is
the *same* attribute of the *same* instance of some entity then it
should generally be recorded exactly ONCE in the database. That's a
pretty important guiding principle of design. See Date and McGovern for
example:
http://www.dbdebunk.com/page/page/622331.htm
David Portas, SQL Server MVP
Whenever possible please post enough code to reproduce your problem.
Including CREATE TABLE and INSERT statements usually helps.
State what version of SQL Server you are using and specify the content
of any error messages.
SQL Server Books Online:
http://msdn2.microsoft.com/library/ms130214(en-US,SQL.90).aspx
--|||RE:
<< This is a loose kind of entity relationsihip, not an "is a"
relationship.>>
Exactly. It's really a "was a" relationship (i.e., the Patient was-a
Referral).
But at the end of the day, it's still the same Person we're tracking (first
as a Referral, then [possibly] as a Patient. Our current design does, in
fact, extract out the common attributes to a 3rd "People" table... so
redundancy is [for now, anyway] eliminated.
-J|||"David Portas" <REMOVE_BEFORE_REPLYING_dportas@.acm.org> wrote in message
news:1150493353.841502.230840@.i40g2000cwc.googlegroups.com...
> David Browne wrote:
> Maybe the name of the table seems inappropriate somehow. That's easily
> fixed. The idea of recording a patient's name only once isn't absurd at
> all.
>
> Possibly. But then they are *different* attributes (the same person
> entity can have both a Patient Name and a Referral Name). If that were
> so then I would agree that they should appear in both tables. My
> original advice still stands in that case because we are now talking
> about *different* attributes.
>
> That's not an argument for redundancy though. In that case I would
> create a third table for the common attributes.
>
> I'd argue very strongly against "in general". What you have described
> creates redundancy and the potential for anomaly. If an attribute is
> the *same* attribute of the *same* instance of some entity then it
> should generally be recorded exactly ONCE in the database. That's a
> pretty important guiding principle of design. See Date and McGovern for
> example:
I agree. It all turns on what is the same entity. As with normalization,
the possibility of update anomalies should be your guide. Back to the
doctor's office. If Patent and Refferal both have a PhoneNumber, and
someone updates the Patient.PhoneNumber is that an update anomaly? Perhaps.
If it is, then they should be modeled as one entity. Very possibly,
however, it is not an update anomaly, as it might make perfect sense for a
Referral stay unchanged. In that case, the Referral really models a
different entity. It represents the transaction with a referring doctor,
instead of an interaction with a Patient.
David|||A similar situation: there is a table Driver, and another table
Traffic_Accident_Party.
When Jane Doe gets a license, a row is inserted into Driver. When she
crashes her car, the information about the accident needs to be a
snapshot: when later Jane Doe marries, the traffic accident report
should still print with her maiden name. But I don't think her last
name needs to be copied to Traffic_Accident_Party. Instead, I would
store old versions of all the names, as well as the dates they were
valid from and to.
Traffic_Accident_Party should be as short as Driver_ID and
Traffic_Accident_ID.
Makes sense?

Data Modeling Question - Medical Lab Test Results

I am redesigning a database for two medical offices who are merging their
operations. Each office currently has its own database, and I'm retiring
both with something that will be better. One existing db was implemented in
MS Access and the other in Oracle. The replacement will be implemented in
SQL Server.
Both databases store Lab Test Results in a denormalized table structure. The
MS Access database stores this data "horizontally" (in columns in multiple
tables - with lotsa nulls as can be expected). The Oracle database stores
similar information "vertically" (in two tables - one table is a
"dictionary" of what's possible in the other table which stores the actual
values; missing rows imply a null value in this table).
My preference for the redesign is to identify the logical groupings of lab
results and place those in their own table. So instead of storing the data
"vertically" or "horizontally" in a denormalized fashion, we'd have several
tables related to each other and to the patient that more closely model the
various "things about the patient" the lab tests are measuring.
My question is this: What would you recommend for how we go about the
redesign: keep this data denormalized, or create a more normalized table
structure?
FWIW: Here's sample DDL (stripped of everything but the ColumnName, Data
Type, Length) from the MS Access database. This should give you a pretty
good idea of the kinds of "lab results" being stored in the existing db.
--
PatientMRN Text 10
Stent Text 60
StentDate Date 8
CABG Text 75
CABGDate Date 8
Biopsy Memo 0
BiopsyDate Date 8
VCUG Text 75
VCUGDate Date 8
Ultrasound Memo 0
Ultrasound2 Text 75
UltrasoundDate Date 8
PostVoidResidual Text 75
PostVoidResidualDate Date 8
Urolynamics Memo 0
UrolynamicsDate Date 8
DopplerCarotid Text 75
DopplerCarotidDate Date 8
DopplerLE Text 75
DopplerLEDate Date 8
IliacArtDup Text 75
IliacArtDupDate Date 8
OphthamologyExam Text 75
OphthamologyExamDate Date 8
Mammogram Memo 0
MammogramDate Date 8
PapSmear Memo 0
PapSmearDate Date 8
AdditionalTests1 Memo 0
AdditionalTestsDate1 Date 8
AdditionalTests2 Memo 0
AdditionalTestsDate2 Date 8
AdditionalTests3 Memo 0
AdditionalTestsDate3 Date 8
AdditionalTests4 Memo 0
AdditionalTestsDate4 Date 8
AdditionalTests5 Text 75
AdditionalTestsDate5 Date 8
AdditionalTests6 Text 75
AdditionalTestsDate6 Date 8
Vascular Memo 0
VascularDate Date 8
Gi Memo 0
GiDate Date 8
Cardiology Memo 0
CardiologyDate Date 8
Urology Memo 0
UrologyDate Date 8
Pulmanary Text 75
PulmanaryDate Date 8
Endocrinology Text 75
EndocrinologyDate Date 8
Gyn Text 75
GynDate Date 8
Dentistry Memo 0
DentistryDate Date 8
Psychiatry Memo 0
PsychiatryDate Date 8
Dietary Text 75
DietaryDate Date 8
Other Memo 0
Other2 Text 75
Other3 Text 75
OtherDate Date 8
LastDraw Date 8
CompletionDate Date 8
Na Double 8
K Double 8
CL Double 8
CO2 Double 8
BUN Double 8
CR Double 8
CA Double 8
ALB Double 8
PHOS Double 8
Gluc Double 8
Choles Double 8
Trig Double 8
TP Double 8
AlkPhos Double 8
AST Double 8
ALT Double 8
LDH Double 8
BILI-TOT Double 8
WBC Double 8
RBC Double 8
HGB Double 8
HCT Double 8
Plt Double 8
Segs Double 8
Lymphs Double 8
Monos Double 8
Eosins Double 8
Basos Double 8
PT Double 8
PTDate Date 8
INR Double 8
INRDate Date 8
TSH Double 8
TSHDate Date 8
PSA Double 8
PSADate Date 8
PTH Double 8
PTHDate Date 8
T4 Double 8
T4Date Date 8
Anticardiolipin Text 2
AnticardiolipinDate Date 8
Anticardiolipin2 Double 8
PancreasDate Date 8
CPeptide_Anylase Text 5
GlycoHemo_Lipase Double 8
HDL Double 8
Triglycerides Double 8
Cholesterol Double 8
HbgAIC Double 8
CMV Text 2
TiterGreaterLess Text 2
CMVTiter2 Long 4
CMVTiterDate Date 8
CMVAbIgM Text 2
CMVAbIgM2 Double 8
CMVAbIgMDate Date 8
CMVAbIgG Text 1
CMVAbIgG2 Double 8
CMVAbIgGDate Date 8
VZV Text 1
VZVDate Date 8
Cocci Text 1
CocciDate Date 8
HBsAb Text 1
HBsAbDate Date 8
Toxo Text 1
ToxoDate Date 8
RPR Text 1
RPRDate Date 8
HBsAg Text 1
HBsAgDate Date 8
HTLV Text 1
HTLVDate Date 8
EBVIgG Text 1
EBVIgGGreaterLess Text 2
EBVIgG3 Long 4
EBVIgGDate Date 8
HBcAb Text 1
HBcAbDate Date 8
HIV Text 1
HIVDate Date 8
EBVIgM Text 1
EBVIgMGreaterLess Text 2
EBVIgM3 Long 4
EBVIgMDate Date 8
HCVAb Text 1
HCVAbDate Date 8
ImmABODate Date 8
ImmABO Text 2
ImmRh Text 1
ABORhDate2 Date 8
ABO2 Text 2
Rh2 Text 1
VerifyName Text 30
Event Memo 0
PRA1 Text 7
PRA2 Text 7
HLA_A1 Text 10
HLA_A2 Text 10
HLA_B1 Text 10
HLA_B2 Text 10
HLA_Bw1 Text 10
HLA_Bw2 Text 10
HLA_C1 Text 10
HLA_C2 Text 10
HLA_DR1 Text 10
HLA_DR2 Text 10
HLA_DQ1 Text 10
HLA_DQ2 Text 10
Mismatches Text 50
PeakPercent Integer 2
PeakPercentDate Date 8
CurrentPercent Integer 2
CurrentPercentDate Date 8
AntimurineAb Text 7
AntimurineAbDate Date 8
AntiHorse Text 7
AntiHorseAbDate Date 8
AntiRabbitAb Text 7
AntiRabbitAbDate Date 8
CurrentSpec Text 110
HistoricSpec Text 250
UrineStudyDate Date 8
Studies1 Text 30
Studies2 Text 30
UrineSG Double 8
UrineProt Text 10
UrineGluc Text 5
UrineWBC Text 6
UrineRBC Text 6
UrineBact Text 6
UrineCulure Text 15
CreatinineClearance Double 8
CreatinineClearanceDate Date 8
CalculatedCreatinineClearance Double 8
CalculatedCreatinineClearanceDate Date 8
UrineOther Text 30
UrineOther2 Text 30
EKGComment Text 100
EKGDate Date 8
EchoComment Text 255
EchoComment2 Text 130
EchoGDate Date 8
StressEcho Text 90
StressEchoDate Date 8
CardioliteStress Text 90
CardioliteStressDate Date 8
Rest Text 90
RestDate Date 8
Stress Text 90
StressDate Date 8
CXR Text 90
CXRDate Date 8
PFT Text 90
PFTDate Date 8
ABG Text 65
ABGDate Date 8
Spirometry Text 80
SpirometryDate Date 8
Angio Text 100
AngioDate Date 8
Stent Text 60
StentDate Date 8
CABG Text 75
CABGDate Date 8
<< END of Original POST>>I believe your "vertical" approach sounds like a normalized design. You
would have a table of possible tests, another of patients and then an
associative object (junction table) that links a patient to a test. You'd
have to allow for multiples of the same test on the same patient, though
likely this would not occur on the same day. That table would likely look
like:
PatientTests
PatientID -> FK to Patients
TestID -> FK to Tests
TestDate
Remarks
Hopefully, the table of tests is straightforward, though it is possible that
certain tests would have attributes that would not apply to other tests. In
that case, you could have exclusive subtypes, with a parent test table -
containing the common attributes - and child tables with the specialized
stuff.
Tom
----
Thomas A. Moreau, BSc, PhD, MCSE, MCDBA
SQL Server MVP
Toronto, ON Canada
.
"Frankie" <A@.B.COM> wrote in message
news:%23P%23ICzxkGHA.2272@.TK2MSFTNGP05.phx.gbl...
I am redesigning a database for two medical offices who are merging their
operations. Each office currently has its own database, and I'm retiring
both with something that will be better. One existing db was implemented in
MS Access and the other in Oracle. The replacement will be implemented in
SQL Server.
Both databases store Lab Test Results in a denormalized table structure. The
MS Access database stores this data "horizontally" (in columns in multiple
tables - with lotsa nulls as can be expected). The Oracle database stores
similar information "vertically" (in two tables - one table is a
"dictionary" of what's possible in the other table which stores the actual
values; missing rows imply a null value in this table).
My preference for the redesign is to identify the logical groupings of lab
results and place those in their own table. So instead of storing the data
"vertically" or "horizontally" in a denormalized fashion, we'd have several
tables related to each other and to the patient that more closely model the
various "things about the patient" the lab tests are measuring.
My question is this: What would you recommend for how we go about the
redesign: keep this data denormalized, or create a more normalized table
structure?
FWIW: Here's sample DDL (stripped of everything but the ColumnName, Data
Type, Length) from the MS Access database. This should give you a pretty
good idea of the kinds of "lab results" being stored in the existing db.
--
PatientMRN Text 10
Stent Text 60
StentDate Date 8
CABG Text 75
CABGDate Date 8
Biopsy Memo 0
BiopsyDate Date 8
VCUG Text 75
VCUGDate Date 8
Ultrasound Memo 0
Ultrasound2 Text 75
UltrasoundDate Date 8
PostVoidResidual Text 75
PostVoidResidualDate Date 8
Urolynamics Memo 0
UrolynamicsDate Date 8
DopplerCarotid Text 75
DopplerCarotidDate Date 8
DopplerLE Text 75
DopplerLEDate Date 8
IliacArtDup Text 75
IliacArtDupDate Date 8
OphthamologyExam Text 75
OphthamologyExamDate Date 8
Mammogram Memo 0
MammogramDate Date 8
PapSmear Memo 0
PapSmearDate Date 8
AdditionalTests1 Memo 0
AdditionalTestsDate1 Date 8
AdditionalTests2 Memo 0
AdditionalTestsDate2 Date 8
AdditionalTests3 Memo 0
AdditionalTestsDate3 Date 8
AdditionalTests4 Memo 0
AdditionalTestsDate4 Date 8
AdditionalTests5 Text 75
AdditionalTestsDate5 Date 8
AdditionalTests6 Text 75
AdditionalTestsDate6 Date 8
Vascular Memo 0
VascularDate Date 8
Gi Memo 0
GiDate Date 8
Cardiology Memo 0
CardiologyDate Date 8
Urology Memo 0
UrologyDate Date 8
Pulmanary Text 75
PulmanaryDate Date 8
Endocrinology Text 75
EndocrinologyDate Date 8
Gyn Text 75
GynDate Date 8
Dentistry Memo 0
DentistryDate Date 8
Psychiatry Memo 0
PsychiatryDate Date 8
Dietary Text 75
DietaryDate Date 8
Other Memo 0
Other2 Text 75
Other3 Text 75
OtherDate Date 8
LastDraw Date 8
CompletionDate Date 8
Na Double 8
K Double 8
CL Double 8
CO2 Double 8
BUN Double 8
CR Double 8
CA Double 8
ALB Double 8
PHOS Double 8
Gluc Double 8
Choles Double 8
Trig Double 8
TP Double 8
AlkPhos Double 8
AST Double 8
ALT Double 8
LDH Double 8
BILI-TOT Double 8
WBC Double 8
RBC Double 8
HGB Double 8
HCT Double 8
Plt Double 8
Segs Double 8
Lymphs Double 8
Monos Double 8
Eosins Double 8
Basos Double 8
PT Double 8
PTDate Date 8
INR Double 8
INRDate Date 8
TSH Double 8
TSHDate Date 8
PSA Double 8
PSADate Date 8
PTH Double 8
PTHDate Date 8
T4 Double 8
T4Date Date 8
Anticardiolipin Text 2
AnticardiolipinDate Date 8
Anticardiolipin2 Double 8
PancreasDate Date 8
CPeptide_Anylase Text 5
GlycoHemo_Lipase Double 8
HDL Double 8
Triglycerides Double 8
Cholesterol Double 8
HbgAIC Double 8
CMV Text 2
TiterGreaterLess Text 2
CMVTiter2 Long 4
CMVTiterDate Date 8
CMVAbIgM Text 2
CMVAbIgM2 Double 8
CMVAbIgMDate Date 8
CMVAbIgG Text 1
CMVAbIgG2 Double 8
CMVAbIgGDate Date 8
VZV Text 1
VZVDate Date 8
Cocci Text 1
CocciDate Date 8
HBsAb Text 1
HBsAbDate Date 8
Toxo Text 1
ToxoDate Date 8
RPR Text 1
RPRDate Date 8
HBsAg Text 1
HBsAgDate Date 8
HTLV Text 1
HTLVDate Date 8
EBVIgG Text 1
EBVIgGGreaterLess Text 2
EBVIgG3 Long 4
EBVIgGDate Date 8
HBcAb Text 1
HBcAbDate Date 8
HIV Text 1
HIVDate Date 8
EBVIgM Text 1
EBVIgMGreaterLess Text 2
EBVIgM3 Long 4
EBVIgMDate Date 8
HCVAb Text 1
HCVAbDate Date 8
ImmABODate Date 8
ImmABO Text 2
ImmRh Text 1
ABORhDate2 Date 8
ABO2 Text 2
Rh2 Text 1
VerifyName Text 30
Event Memo 0
PRA1 Text 7
PRA2 Text 7
HLA_A1 Text 10
HLA_A2 Text 10
HLA_B1 Text 10
HLA_B2 Text 10
HLA_Bw1 Text 10
HLA_Bw2 Text 10
HLA_C1 Text 10
HLA_C2 Text 10
HLA_DR1 Text 10
HLA_DR2 Text 10
HLA_DQ1 Text 10
HLA_DQ2 Text 10
Mismatches Text 50
PeakPercent Integer 2
PeakPercentDate Date 8
CurrentPercent Integer 2
CurrentPercentDate Date 8
AntimurineAb Text 7
AntimurineAbDate Date 8
AntiHorse Text 7
AntiHorseAbDate Date 8
AntiRabbitAb Text 7
AntiRabbitAbDate Date 8
CurrentSpec Text 110
HistoricSpec Text 250
UrineStudyDate Date 8
Studies1 Text 30
Studies2 Text 30
UrineSG Double 8
UrineProt Text 10
UrineGluc Text 5
UrineWBC Text 6
UrineRBC Text 6
UrineBact Text 6
UrineCulure Text 15
CreatinineClearance Double 8
CreatinineClearanceDate Date 8
CalculatedCreatinineClearance Double 8
CalculatedCreatinineClearanceDate Date 8
UrineOther Text 30
UrineOther2 Text 30
EKGComment Text 100
EKGDate Date 8
EchoComment Text 255
EchoComment2 Text 130
EchoGDate Date 8
StressEcho Text 90
StressEchoDate Date 8
CardioliteStress Text 90
CardioliteStressDate Date 8
Rest Text 90
RestDate Date 8
Stress Text 90
StressDate Date 8
CXR Text 90
CXRDate Date 8
PFT Text 90
PFTDate Date 8
ABG Text 65
ABGDate Date 8
Spirometry Text 80
SpirometryDate Date 8
Angio Text 100
AngioDate Date 8
Stent Text 60
StentDate Date 8
CABG Text 75
CABGDate Date 8
<< END of Original POST>>|||>> My question is this: What would you recommend for how we go about the
Do you know the benefits of having a normalized schema? Do you understand
the drawbacks of "denormalized" structures? You have already stated that
your preference is to identify the logical groupings of lab results and
place those in their own table. Therefore, the answer should be obvious.
Anith

Data Modeling Question

I'm designing a database for a medical group that must keep track of various
"People"
Some are doctors and some are patients.
The client currently categorizes patients according to the type of
procedure(s) they have been seen for (e..g, "Jane is a Botox patient because
she had Botox injections" while "Ralph is a hair transplant patient because
he's had hair transplants." And on and on it goes). These procedures are
obviously not mutually exclusive given that any given patient can have more
than one type of procedure.
As I see the situation we have [Patients] and [Procedures]. We do NOT have
[patient types] even though that's how the client understands them. We just
have patients who have various procedures.
My whiz bang plan is to simply have a many-to-many relationship between
[Patients] and [Procedures].
This will work fine for identifying the so called "patient types"... just
SELECT... WHERE a Procedure Type is "botox" (however I encode that) to get
"the Botox patients".
Question 1: What would be a good way to classify a patient who has not yet
had any procedure? Say Bambi comes in and gets scheduled for Botox. The
doctors would want her to show up on reports as a "Botox patient" even
though she hasn't yet had the procedure.
Question 2: Given that [Doctors] and [Patients] are fundamentally different
"things" in this database, is it reasonable to have two tables - one for
Doctors and another for Patients... or is it recommended to have one table
("People") and then have some "PersonType" column that flags the person as a
doctor or a patient (and then have a bunch of NULLS for columns not relevant
to each row's designated "person type"). The one-table approach seems kind
of ugly. Just wanted some feedback on this before I go off and implement.
Thank you for your time and consideration.
-JThis has similarities to the database I work with, which is hr/payroll
data. There is a table of 'positions' (job titles a person can have).
You may have an equivalent 'procedures' table. Procedures table would
likely have budget/costs associated with the procedure.
Another table would have the procedure history for a person. A person
could have multiple records in that table, each would have a key for
the person, the procedure name, the procedure key (for joining to
'procedures' table). This table would have a startdate and enddate for
the procedure. A person who is scheduled, but has not yet had the
procedure merely has a futuredated record in this table (based on
startdate). When the procedure is done, you give the record an
enddate.
Doctors and patients all belong in the same table b/c a doctor could be
a patient and vice versa. Each person has their own unique id and also
a second field which is the id of that persons PCP. So if you have:
name, uniqueid, PCPid
dr smith, 1, 0
dr jones, 2, 0
sick guy,3,1
dr williams,4,2
This means that sick guy goes to dr. smith. Dr williams goes to Dr.
Jones.
You likely WILL need a flag field that lets you clearly determine who
is a doc ('flagdoc' that has y/n or 1/0 for everyone).
Based on similar relationships, this is how my company does it.
Theoretically, maybe you don't have to put the procedure name in the
procedure history, but it's nice having it there.
HTH,
wayne|||>> is it reasonable to have two tables - one for Doctors and another for Pat
ients... or is it recommended to have one table ("People") <<
Doctors and patients are logically different, so I would scrape the
idea of a general "Peoiple" table. Where is the "Treatments" table
that would show the dates (scheduled, actual, etc.), location,
doctor(s), etc. for Bambi's Botox?
As a patient. The assorted procedures done to them are events and not
attributes of the patient himself.|||> Question 1: What would be a good way to classify a patient who has not yet
> had any procedure? Say Bambi comes in and gets scheduled for Botox. The
> doctors would want her to show up on reports as a "Botox patient" even
> though she hasn't yet had the procedure.
I would suggest you document people throughout their lifecycle with you. So
when the patient comes in, planning to get Botox, a row is created in the
Patients and PatientProcedures table. Another table would be related to the
patientProcedures table that would document the status of the relationship.
Planned, Scheduled, Occurred, FollowUp, OopsPatientLooksLikeJoanRivers and
so on (I will assume you are with the jokes since you started it out
with "Bambi" "). Then you have the best of both scenarios.

> Question 2: Given that [Doctors] and [Patients] are fundamentally
> different "things" in this database, is it reasonable to have two tables -
> one for Doctors and another for Patients... or is it recommended to have
> one table ("People") and then have some "PersonType" column that flags the
> person as a doctor or a patient (and then have a bunch of NULLS for
> columns not relevant to each row's designated "person type"). The
> one-table approach seems kind of ugly. Just wanted some feedback on this
> before I go off and implement.
Tough call. I would would not suggest the one table approach, but a table
for generic "people" attributes, and another for patient attributes. I
wouldn't have a PersonType in this case because a person could be both (the
key of the two subordinate tables would be the same as for the Person table
so a person could only be mapped once.) The existance of a row in the
patient table would indicate that the person is a patient. (Will you have
nurses, sleep makers (can't spell anesthesiologist) and such. Particularly
for billing and/or scheduling I would imagine.)
Now you have everything you need (I think) you can tell the type of patient
immediately, including their status "Planned" "Botox", "Scheduled" "Hair
Transplant" and after > 1 procedures takes place: "Planned" "Repeat"
"Botox". Then they can get specific about the types of patient that they
are looking at.
----
Louis Davidson - http://spaces.msn.com/members/drsql/
SQL Server MVP
"Arguments are to be avoided: they are always vulgar and often convincing."
(Oscar Wilde)
"Jordan R." <A@.B.COM> wrote in message
news:ux0URV4LGHA.3100@.tk2msftngp13.phx.gbl...
> I'm designing a database for a medical group that must keep track of
> various "People"
> Some are doctors and some are patients.
> The client currently categorizes patients according to the type of
> procedure(s) they have been seen for (e..g, "Jane is a Botox patient
> because she had Botox injections" while "Ralph is a hair transplant
> patient because he's had hair transplants." And on and on it goes). These
> procedures are obviously not mutually exclusive given that any given
> patient can have more than one type of procedure.
> As I see the situation we have [Patients] and [Procedures]. We do NOT have
> [patient types] even though that's how the client understands them. We
> just have patients who have various procedures.
> My whiz bang plan is to simply have a many-to-many relationship between
> [Patients] and [Procedures].
> This will work fine for identifying the so called "patient types"... just
> SELECT... WHERE a Procedure Type is "botox" (however I encode that) to get
> "the Botox patients".
> Question 1: What would be a good way to classify a patient who has not yet
> had any procedure? Say Bambi comes in and gets scheduled for Botox. The
> doctors would want her to show up on reports as a "Botox patient" even
> though she hasn't yet had the procedure.
> Question 2: Given that [Doctors] and [Patients] are fundamentally
> different "things" in this database, is it reasonable to have two tables -
> one for Doctors and another for Patients... or is it recommended to have
> one table ("People") and then have some "PersonType" column that flags the
> person as a doctor or a patient (and then have a bunch of NULLS for
> columns not relevant to each row's designated "person type"). The
> one-table approach seems kind of ugly. Just wanted some feedback on this
> before I go off and implement.
> Thank you for your time and consideration.
> -J
>|||wouldn't it be pretty common for a doctor to also be a patient of
his/her own group practice'
The futuredated record mentioned above could be a bit dangerous b/c
people will definitely back out on things. Our place has a whole
module for 'applicants'. If they are hired, then they get records for
jobs, etc. The data model for people who say they 'want to do something
in the future' could be pretty complex...|||The more I ponder, the one table layout works well when the patient
only goes to one doctor and does not switch too often. We use the
above layout for employees and their dependents (which is a nice,
static relationship).
It does sound like the patients at your place can have numerous doctors
work on them over the course of time. Your db revolves around the
procedure--which can have one patient, one or two docs. Splitting out
may well be the best way to go.|||>> wouldn't it be pretty common for a doctor to also be a patient of his/her
own group practice? <<
No, not in the US; insurnace companies would go nuts. Can you say
"FRAUD!!"?
So we need both an actuial and schedule appointment date. Sounds like
a good source for stats and predictions!|||Louis Davidson wrote:
> Tough call. I would would not suggest the one table approach, but a table
> for generic "people" attributes, and another for patient attributes.
Which country? The generic "people" approach seems to be the one taken
by the UK's National Health Service (the world's largest?) In the
interest of standards, they have published their data dictionary:
http://www.nhsia.nhs.uk/datastandar...
.asp?shownav=1
Jamie.|||Yes, but a person in one country is still a person in another. I would
suggest that whatever this person needs would be the best approach. At a
minimum First Name, Last Name, mailing address, etc, perhaps some form of Id
Number, perhaps. The basics.
Some of these things in their list would be very offensive to Americans.
For some reason we will give up our "tax" number (social security number,
which is becoming too much of a citizen id number)
Then the patient would have a file number, perhaps if all records are stored
in a paper format, medical information, etc. This table would be related to
the appointment calendar, billing.
Then doctors information, abilities, schedule, etc.
By no means is this a required way to do it. Having two tables with some
minor overlap of information is not horrible when the two concepts are going
to have little interaction (for example, if you had to balance a doctor's
appointment schedule as a patient AND a doctor, this would be essential.)
Frankly if the only overlapping information in a medical system is that a
doctor is entered as a patient of another doctor AND a doctor of patients,
the world would rejoice at not having to explain why they want to see the
doctor 10 times.
----
Louis Davidson - http://spaces.msn.com/members/drsql/
SQL Server MVP
"Arguments are to be avoided: they are always vulgar and often convincing."
(Oscar Wilde)
"onedaywhen" <jamiecollins@.xsmail.com> wrote in message
news:1139819374.327665.281610@.f14g2000cwb.googlegroups.com...
> Louis Davidson wrote:
> Which country? The generic "people" approach seems to be the one taken
> by the UK's National Health Service (the world's largest?) In the
> interest of standards, they have published their data dictionary:
> http://www.nhsia.nhs.uk/datastandar...t.asp?shownav=1
> Jamie.
> --
>|||Louis Davidson wrote:
> Some of these things in their list would be very offensive to Americans.
> For some reason we will give up our "tax" number (social security number,
> which is becoming too much of a citizen id number)
That's why I opened with, 'Which country?" :) If the OP (or other
interested reader) is in the UK then choosing to follow the NHS model
is one way of resolving the quandary.
FWIW here we seem to be moving in the opposite direction e.g. identity
cards for all :(
Jamie