2012-09-03 58 views
1

我已經使用MySQL和這樣的數據庫設計。如何在MySQL中設計醫院RDBMS?

hospital rdbms design

這個數據庫是部分的設計醫院。 患者表中有超過1.500.000的患者記錄。 在臨牀表中有15條記錄。 醫生表中有25條記錄。 診斷表中有500多條記錄。 在out_condition表中有10條記錄。

而且所有的表都與表transaction_current相關。 完成後,交易轉移到歷史記錄表。

這是一個糟糕的設計?因爲在查詢選擇中,需要一分鐘時間才能讓一名患者進入瀏覽模式。 如果這是最好的關係設計,我應該如何使用包含所有關係表參考的事務表的select查詢。

感謝您的幫助。

編輯: 「?對不起...這裏是我的形象設計只是我borwser呢......」

這是樣本選擇查詢

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

+1

你有什麼指數? –

+2

嘗試在dba.stackexchange.com中詢問 – Raptor

+0

所有p_key中的索引,但不包含在f_key中 –

回答

0

最好是對你的查詢應用一些優化步驟。

如: - 使用運營商存在,並表適當加入您的查詢

更好地避免在where子句中太多比較。我相信這是你有滯後的地方。您可以比較具有建立索引的字段。所以它在查詢上會快得多。

P.S. :即使標準化有一些時候,最好堅持使用較少的標準化形式(根據經驗))

+0

嗯......你的意思是在交易中不把「代碼」保存爲「f_key」?所以在交易有這樣的... doctor_name,clinic_name,...等?謝謝你的回答。 referensce鏈接,請..重新設計我的RDBMS –

+1

非常感謝你。我已經明白了。看到我編輯的問題。 –

+0

很高興幫助您Candra Purnama。我播下你的編輯,你就有了點點。此外還有更多優化技術。谷歌的「SQL查詢優化」,你會發現更有用的提示。 :) – Ruwantha

0

您的餐桌設計看起來不錯。這是正常化的,我不希望任何性能問題來自設計。作爲引擎使用的更多細節(InnoDB?),具體表格的定義和現有指標將幫助其他人提供更多建議。

您的查詢似乎正在連接4個相當小的表格和兩個較大的表格(patienttransaction_current)。因此,如果您已經將外鍵定義爲您的圖像顯示並且它們被索引(以及引用和引用相同數據類型的列),則此查詢應該非常快。

如果在patient_name上沒有索引,則最可能的瓶頸是。這將需要patient表的表掃描。

+0

是的。 InnoDB被用在我所有的表格中。所有的primary_key(p_key)都是索引,但不是全部的f_key。正如你寫的,patient.patient_name,沒有索引。我嘗試將此名稱編入索引,並將縮略視爲第二,但仍限制一分鐘。我認爲用「patient.patient_name」作爲「key_word搜索」,應該編入索引。那是對的?如果我在WHERE中更改子句會給出好的結果?前;從「transaction_current.clinic_code = clinic.clinic_code」到「clinic.clinic_code = transaction_current.clinic_code」。感謝您的解釋。 –

+0

你有沒有在'CREATE TABLE'語句中定義的外鍵? –

+0

對不起,我遲到了。並非所有的時間在線。在transaction_current中用f_key是外鍵。 –