Sua pergunta não está muito clara para mim. Por exemplo, você fala sobre pacientes e enfermeiras sendo vinculados a "Prioridade" e médicos sendo vinculados a "Tempo" e "Prioridade" - e você escreve como se fossem outras tabelas - mas não as descreve.
Abaixo está como eu resolveria seu problema, com base no entendimento nebuloso que tenho do seu problema.
Não sei o que significa A&E. Estou assumindo que é uma clínica, hospital ou outra instalação.
aes
id unsigned int(P)
street_address varchar(75)
city_id unsigned int(F cities.id)
postcode varchar(10) // Whatever the size of your postal code.
telenumber varchar(10) // Whatever the size of your telenumber.
Obviamente seu "estado" poderia ser diferente. Aqui nos Estados Unidos, todos os nossos estados têm um código exclusivo de 2 caracteres.
cities
id unsigned int(P)
name varchar(50)
state_id char(2)(F states.id)
Você não descreveu o que você precisa saber sobre médicos, então estou assumindo que é o mesmo que você precisa saber sobre enfermeiras.
doctors
id unsigned int(P)
forename varchar(50)
surname varchar(50)
Coisas como:gripe, bronquite, sinusite, etc.
illnesses
id unsigned int(P)
description varchar(75)
nurses
id unsigned int(P)
forename varchar(50)
surname varchar(50)
Coloquei o histórico do paciente em sua própria tabela para que possamos associar várias doenças a cada paciente, bem como uma data de quando o paciente teve cada doença.
patient_history
id unsigned int(P)
patient_id unsigned int(F patients.id)
illness_id unsigned int(F illnesses.id)
qwhen date
patients
id unsigned int(P)
forename varchar(50)
surname varchar(50)
gender enum('f','m')
dob date
street_address varchar(75)
city_id unsigned int(F cities.id)
postcode varchar(10) // Whatever the size of your postal code.
telenumber varchar(10) // Whatever the size of your telenumber.
Novamente, seus "estados" podem ter um ID ou nome de tamanho diferente.
states
id char(2)(P)
name varchar(50)
Coisas como:tontura, fadiga, congestão nasal, falta de ar, etc.
symptoms
id unsigned int(P)
description varchar(50)
Esta tabela contém informações sobre todas as vezes que um paciente visita um pronto-socorro. Qualquer registro que não tenha um end_time representaria um paciente que está atualmente em um pronto-socorro esperando para ser atendido por um médico/enfermeiro. Você pode determinar quanto tempo um paciente está esperando comparando a hora atual com a hora_inicial. E, claro, a prioridade seria inserida/atualizada pelo recepcionista, enfermeira, médico, etc.
visits
id unsigned int(P)
patient_id unsigned int(F patients.id)
nurse_id unsigned int(F nurses.id)
ae_id unsigned int(F aes.id)
priority unsigned tinyint // 1 = Critical, 2 = Urgent, 3 = whatever...
beg_time datetime
end_time datetime
Vários médicos podem ver um paciente...
visits_doctors
id unsigned int(P)
visit_id unsigned int(F visits.id)
doctor_id unsigned int(F doctors.id)
E vários enfermeiros podem ver um paciente...
visits_nurses
id unsigned int(P)
visit_id unsigned int(F visits.id)
nurse_id unsigned int(F nurses.id)
Um paciente geralmente tem vários sintomas quando vem para uma consulta...
visits_symptoms
id unsigned int(P)
visit_id unsigned int(F visits.id)
symptom_id unsigned int(F symptoms.id)