我需要創建一個數據庫表,用於存儲假設患者隊列的生理特徵(例如收縮壓,甘油三酯濃度等)的參數化描述。使用可選列正確標準化數據庫
例如,假設用戶爲SBP指定了一個三角形分佈,那麼將不得不存儲最小值,最大值和模式(以及分佈類型)。或者,用戶可以指定正態分佈,需要存儲均值和標準差。
我正在努力用正確的方式來規範化這些數據。目前,我有一個隊列表,並與多家一到一個如下關係的分佈表(某些字段省略):
Cohort id (INT, NOT NULL, PRIMARY) name (TEXT, NOT NULL) comments (TEXT) systolic_blood_pressure_dist (FOREIGN KEY referencing Distributions.id) triglyceride_dist (FOREIGN KEY referencing Distributions.id) ...other physiological parameters Distributions id (INT, NOT NULL, PRIMARY) distribution_type (TEXT) minimum (FLOAT) maximum (FLOAT) mean (FLOAT) mode (FLOAT) sd (FLOAT) ...other distribution parameters (alpha, beta, shape, scale, etc.)
(distribution_type保存描述分配的字符串:「三角」,「威布爾「等)
我敢肯定,這不是最佳的方式來做到這一點,因爲我留在每個分配行中的NULL字段的負載。
我的其它的想法是爲每個分發類型(一個用於三角,一個用於高斯,一個用於均勻,等)單獨的表,並具有在中間的表的ID柱(用作外鍵入隊列表* _dist列),分配類型列和id列以將行的外鍵存儲在適當的分配表中。
查詢將使用存儲在羣組列中的ID從中間表中查找分佈類型和行ID,然後使用該ID在相應的表中查找參數。但是,使用一個字符串來選擇適當的表,然後另一個id來選擇適當的行遠離傳統的JOIN,也不覺得像一個非常乾淨的方法。
那麼,有沒有人有任何建議如何最好地實現這一點(在規範化和/或性能方面)?
非常感謝, 豐富
非常感謝您的及時響應!我對解決方案的幾個方面有點不清楚,特別是CohortParameters表 - 它的目的是什麼,價值列的目的是什麼?另外,Distributions表仍然會有NULL值問題(儘管忽略了浪費的空間,但我仍然不相信自己這是一個真正的問題......)。再次感謝您對此的投入,Rich。 – 2009-08-09 21:17:48