1

私はMySQLとこのようなデータベース設計を使用しています。

病院のrdbms設計

このデータベースは病院向けの部品設計です。患者テーブルには、1.500.000を超える患者の記録があります。クリニックのテーブルには15のレコードがあります。ドクターテーブルには25の記録があります。診断テーブルには500以上のレコードがあります。out_conditionテーブルには10個のレコードがあります。

そして、テーブルtransaction_currentに関連するすべてのテーブル。終了後、トランザクションは履歴テーブルに移動しました。

これは悪いデザインですか?クエリ選択では、1人の患者をブラウズモードにするのに1分以上かかるためです。これが最良のリレーションデザインである場合、すべてのリレーションテーブル参照が含まれているトランザクションテーブルのselectクエリをどのように使用する必要がありますか。

助けてくれてありがとう。

編集:「申し訳ありません...私の画像デザインはどこにありますか?私の借り手だけがしますか?...」

これはサンプル選択クエリです

select  transaction_current.registration_number, 
        transaction_current.Date_registration, 
        patient.mr_code, 
        patient.patient_name,
        clinic.Poly_clinic_name, 
        doctor.doctor_name, 
        diagnose.diagnose_name,
        out_condition.OC_name
from transaction_current,patient, clinic, doctor, diagnose, out_condition
where   transaction_current.patient_code=patient.MR_code and 
        transaction_current.clinic_code=clinic.clinic_code and 
        transaction_current.doctor_code=doctor.doctor_code and 
        transaction_current.diagnose_code=diagnose.doagnose_code and 
        transaction_current.OC_code=Out_Condition.OC_code
        and patient.patient_name = 'xxx%'

答えた:氏からの慎重な答えの後。rj45は、正規化が推奨されない場合があります。特に履歴データの場合。参照テーブルに変更がある場合は、履歴データも変更されます。このような場合...コードが医師を変更した場合、または削除された場合、レコードは変更履歴に従います。それが意志にないとき。極端な場合、関係コードが一致しないため、データ履歴は表示されません。どうもありがとうございました@rj45

4

2 に答える 2

0

あなたのテーブルのデザインは素晴らしいようです。これは正規化されており、設計に起因するパフォーマンスの問題はないと思います。使用されたエンジン(InnoDB?)、特定のテーブルの定義、および既存のインデックスに関する詳細は、他の人がより多くのアドバイスを与えるのに役立ちます。

クエリは、4つのかなり小さいテーブルと2つの大きいテーブル(patientおよびtransaction_current)を結合しているようです。したがって、画像が示すように外部キーを定義し、それらにインデックスが付けられている場合(および同じデータ型の参照列と参照列の両方)、このクエリは非常に高速です。

最も可能性の高いボトルネックは、にインデックスがない場合ですpatient_name。これには、テーブルのテーブルスキャンが必要になりpatientます。

于 2012-09-03T08:11:14.093 に答える
0

クエリにいくつかの最適化手順を適用することをお勧めします。

例:-クエリで演算子EXISTS、INおよびテーブル結合を適切に使用します

where句での比較が多すぎないようにすることをお勧めします。遅れがあるところだと思います。ビルドインデックスのあるフィールドを比較できます。そのため、クエリがはるかに高速になります。

PS:正規化が存在する場合もありますが、正規化されていない形式に固執する方が良い場合があります(経験による;))

于 2012-09-03T05:15:00.080 に答える