Siden appointmnent_id
er den primære nøgle til Appointment
, denne tabel har en 1:N
forhold til alle 6 borde.
Dette er tilfældet, hvor tilslutning til disse 6 tabeller vil producere flere rækker med duplikerede data , det er som et Cartesian Product
. For eksempel hvis (kun for én id=46
), der er:
- 3 rækker for
PatientInvestigation
- 6 rækker for
PatientTreatmentMedicine
- 4 rækker for
PatientFindings
- 2 rækker for
PatientDiagnosis
- 2 rækker for
PatientCC
- 5 rækker for
PatientAdvice
du får 3x6x4x2x2x5 =1440
rækker i resultatsættet, mens du kun behøver 3+6+4+2+2+5 (+1) =23
rækker. Det er 60 gange flere rækker (og med mange flere kolonner) end nødvendigt.
Det er bedre, hvis du laver 6 separate forespørgsler med én JOIN til en (af de 6) tabeller i hver forespørgsel (og endnu en forespørgsel for at hente dataene fra basistabellen Appointment
). Og kombiner resultaterne af de 6 forespørgsler i applikationskoden . Eksempel på basisforespørgslen og forespørgslen til at slutte sig til den første tabel:
Basistabel :
SELECT
a.appointment_id,
a.patient_id
FROM
Appointment AS a
WHERE
a.appointment_id = 46
Join-1 til PatientInvestigation :
SELECT
pi.investigation_name,
pi.investigation_id
FROM
Appointment AS a
JOIN
PatientInvestigation AS pi
ON pi.appointment_id = a.appointment_id
WHERE
a.appointment_id = 46