How I would lay things out is below. This will normalize the information being saves. There is only one table for information about people, no matter if a patient or a doctor. There is only one table to hold addresses, no matter for patient, doctor, or hospital.
The layout allows for any number of statuses, and keeps a running history in the PatientStatus table - just never update or remove, only add new entries. New status types can be added at any point by adding a new entry in the Statuses table - any number no limit.
People
------
Id
Title
FirstName
MiddleName
LastName
OtherName
Gender
DateOfBirth
Addresses
---------
Id
Type
Line1
Line2
City
State
Zip
Country
PersonAddresses
---------------
Id
PersonId
AddressId
Phones
------
Id
Type
Number
Ext
PersonPhones
------------
Id
PersonId
PhoneId
Emails
------
Id
Type
Address
PersonEmails
------------
Id
PersonId
EmailIs
Hospitals
---------
Id
Name
HospitalAddresses
-----------------
Id
HospitalId
AddressId
Doctors
-------
Id
PersonId
HospitalId
Patients
--------
Id
PersonId
DoctorId
Statuses
--------
Id
Name
PatientStatuses
---------------
PatientId
StatusId
EntryDate
Letters
-------
Id
Name
PatientLetters
--------------
Id
PatientId
LetterId
EntryDate
ResponseDate
ResponseReceived
Some example queries:
List All Doctors
----------------
SELECT P.* FROM Doctors AS D INNER JOIN People AS P ON D.PersonId = P.Id
List All Doctors at a given Hospital
------------------------------------
SELECT P.* FROM Doctors AS D INNER JOIN People AS P ON D.PersonId = P.Id
INNER JOIN Hospitals AS H on D.HospitalId = H.Id
WHERE H.Name='ABC Hospital Inc.'
List Current Patient Statuses
-----------------------------
SELECT P.*, S.Name, PatS.EntryDate FROM Patients AS Pat
INNER JOIN People AS P ON Pat.PersonId.Id = P.Id
INNER JOIN PatientStatuses AS PatS ON PatS.PatientId = Pat.Id
INNER JOIN Statuses AS S ON PatS.StatusId = S.Id
ORDER BY PatS.EntryDate DESC
Setto the table names? Create just a generalAddresstable, and then cross-reference tables as necessary. Potentially create aPersontable, that has things like 'name' in it, then cross-reference for specifics. – Clockwork-Muse Apr 16 '12 at 16:48