2014-02-08 34 views
-3

我很抱歉這個非常基本的問題,但我正處於設計階段,會避免愚蠢的錯誤。設計一個基本的醫學研究數據庫

我一直在致力於臨牀研究的數據庫(PHP\MySQL\Javascript)。數據庫將不需要採取billing infomeds prescriptions,它將成爲更多的共享容器中的大量研究數據(即成像,實驗室,臨牀信息)爲每個病人登記到項目中。

我已經定義了患者被納入研究的人口統計表,並且該工作正常,但是現在是延伸到其他表的時候了。爲簡單起見,目前我只保留2張相關表:人口統計和臨牀信息(歷史&物理,表名:hist_phys)。爲了做到這一點我想使用2種可能的方法:

  1. 定義主鍵(患者ID或PID)插入demographics table和主鑰匙插入hist_phys table(clineval_id)和涉及在表中這辦法。雖然我需要在demographics table中將clineval_id保存爲FK,但每次添加新病人時,都會有新的PID和新的clineval_id,但這種方法仍可行。將使用LEFT JOIN查詢檢索數據...是否正確?

  2. 我想使用的替代方法如下:因爲每個患者將有一個Clinic chart#(由隨機數生成定義),我可以在人口統計學和hist_phys表中使用它作爲外鍵。換句話說,每個表仍然會有一個主鍵(分別是pid和clineval_id),但是我會使用外部鍵(診所#)來關聯這些表。 在這種情況下,我每次向數據庫添加新患者時,將在人口統計表中創建一個診所#並將其複製到hist_phys表(等等)。患者數據將使用WHERE demographics_clinic#= hist_phys_clinic#之類的東西進行檢索。對於sme理由,我對這種方法感到更加舒適,但我不知道這是否正確。

任何意見將不勝感激!

+0

你可以給這個問題添加一些標記嗎?這是不可讀的 –

+0

我們不是來爲你做功課的。 – GordonM

+0

@Jeroen:我很抱歉錯過了加價......因爲沒有代碼我認爲這不是必要的 – Diego

回答

0

這種情況是JOIN的簡單情況。你必須可能性想到這裏:

  1. 如果你在hist_phys表在demographics表比你應該考慮合併他們兩個到一個表中的每個記錄數據的紀錄只有一個,因爲這是1:1的關係。

  2. 如果你在hist_phys表中的多個記錄在demographics表中的每個記錄,比我們是在談論一個1:n關係。兩個表都通過Key存儲在兩個記錄中。在你的例子中,demographics表中的每個記錄的id(可能只是一個INT類型的字段,其上帶有auto_increment)會做我想的。沒有必要使用hist_phys中的密鑰「反向鏈接」並將其存儲在demographics表中。這種關係已經在demographics之間。

專家提示:正如您所說,您正處於設計階段,所以請考慮先使用Entity-Relationship model來佈置您的數據庫模式。

+0

Merguez ...非常感謝您的評論。是的,這絕對是一對多的關係(因爲一名患者可以並且可能會有多次訪問)。當我添加一個新的患者到數據庫時,會創建一個新的patient_id(AUTO_INCREMENT號),但是(在同一個查詢中?)我必須在hist_phys表中創建一個新記錄,是否正確?最後,數據將通過JOIN查詢WHERE demographics_pid = hist_phys_pid?非常感謝您的耐心...... – Diego

+0

您不必在相同的查詢中執行此操作。只要確保在任何時候創建'hist_phys'記錄,都必須包含正確的'patient_id'。你正確的使用'JOIN',但在這種情況下使用'ON'子句,而不是'WHERE'子句;)。 – markusthoemmes

+0

好吧Merguez!將工作...非常感謝你的提示和耐心:) – Diego