上記は私のスキーマです。tblPatientVisits に表示されないのは、 からの外部キーtblPatient
、つまり ですpatientid
。
tblPatient
データセット内の各患者の個別のコピーとその性別が含まれています。 tblPatientVists
入院時に住んでいた場所と通院した病院の人口統計情報が含まれています。その情報はデータ全体で変化するため、別の表に入れることにしました (ある人は、ある訪問から次の訪問に移って、別の病院に行く可能性があります)。
tblPatientVisits を追加するまで、クエリで奇妙な数値を取得することはありません。には 100 万件弱の申し立てがありますが、その人物の出身地を確認できるようtblClaims
に追加すると、100 万件以上が返されます。tblPatientVisits
これはtblPatientVisits
、同じ患者IDが複数回表示されるためだと思います(入院/退院日が異なるため)。
私の人生では、これがどこで間違った設計なのかわかりません。また、 で 1 つのクエリを実行しcount(tblPatientVisits.PatientID=1
てunion
からcount(tblPatientVisits.patientid)>1
.
このタイプの設計に関する洞察、またはtblClaims
クレーム ID を患者 ID に関連付けて正しい行数を得るために、クレーム タイプを取得する方法をよりエレガントに見つけるにはどうすればよいでしょうか?
編集:私が抱えている最大の問題は、tblPatient テーブルに admissionDate,dischargeDate
またはを含めると、患者 ID を主キーとして使用できないという事実です。patientState
に必然的に関連してtblClaims
いることに注意する必要があります。NOT
tblPatientVisits.admissionDate, tblPatientVisits.dischargeDate
編集: tblPatientVisits が追加されると、要求よりも多くの行が返されることを示すサンプル クエリ
SELECT tblclaims.id, tblClaims.claimType
FROM tblClaims INNER JOIN
tblPatientClaims ON tblClaims.id = tblPatientClaims.id INNER JOIN
tblPatient ON tblPatientClaims.patientid = tblPatient.patientID INNER JOIN
tblPatientVisits ON tblPatient.patientID = tblPatientVisits.patientID
100 万を超えるクエリ行が返されました
SELECT tblClaims.id, tblPatient.patientID
FROM tblClaims INNER JOIN
tblPatientClaims ON tblClaims.id = tblPatientClaims.id INNER JOIN
tblPatient ON tblPatientClaims.patientid = tblPatient.patientID
返されるクエリ行は 100 万行未満