0

數據庫初學者在這裏。關係模型vs EAV

我一直在研究專欄模型一段時間,我來到this paper。它基本上提出了專門的專賣店模式來爲稀疏和龐大的臨牀數據進行快速搜索。

我大致理解本文提出的內容,但關於關係模型和EAV模型的一些想法讓我困惑。該論文假設關係模型甚至不能用於臨牀數據,並比較EAV和列存儲模型的性能。

EAV可以表示高維數據,由於現有RDBMS僅支持有限數量的列,因此無法用關係模型進行建模。

當我從this question和它的第一個答案瞭解,臨牀數據是高維(如預期),但

爲什麼經典的正常化,不是用來和EAV用於那些?

關係模型是:

Person: Id, Name, Surname, DateOfBirth, ... 
Measurement: Id, Name, Desc, ... 
PersonMeasurement: Id, PersonId, MeasurementId, Result, Date 
+0

現有RDBMS的限制並不妨礙我們使用關係模型來模擬高維數據,同樣,算盤的限制並不妨礙我們用代數表示大數。現有的RDBMS甚至不忠實地實現關係模型。 – reaanb

+0

請注意,您的PersonMeasurement表是EAV模型而不是關係數據模型。特別是,結果列的域取決於MeasurmentId的值。關係數據模型將組織測量結果作爲一階謂詞,例如, '重量(PersonId PK,Date PK,Kilograms)','BloodPressure(PersonId PK,Date PK,收縮壓,舒張壓)'等等。 – reaanb

+0

現在我很清楚,謝謝。還有一個問題。在今天的RDBMS中,如何將Weight和BloodPressure表示爲真正的關係模型? – dewe

回答

1

...因爲現有的RDBMS只支持列的數量有限。

這取決於對該詞「有限」的含義:一個典型的現代關係數據庫有許多超過1000這裏是一個表的一些最常見的RDBMS中的最大列數列:

PostgresQL: 250 - 1600 depending on column types 
MySQL: upto 4096, depending on row size 
Oracle: 1000 
IBM DB2: 1012 
Mycrosoft SQL Server: 1024 - 30000 
Sybase: 45000 

在你的第二個鏈接有如下語句:

對患者健康狀況的數據可以是高維(100+測量/記錄從血液分析,免疫系統的狀態參數,遺傳背景ound,營養,酒精菸草與毒品消費,運營,治療,診斷疾病,...)

編輯

所以,如果列數是在幾百的順序,我認爲單表方法足以代表臨牀數據,並且從StackOverflow的許多問題中可以看出,比EAV模型更有效且簡單。

+0

感謝您的回答。但主要的問題是,如果對錶格進行規範化處理,那麼與添加太多列無關。我們將添加新的測量類型到測量表和新的測量到PersonMeasurement表。這轉到三表和合理數量的列。我不明白爲什麼有人爲每種測量類型創建一個新列? – dewe

+0

實際上,您提出的關係模式是一種EAV模式,但請注意,具有單個表的替代模式不是非標準化模式!你總是可以在RDBMS的表中添加新的列。所以,我認爲兩種模式之間的選擇取決於有多少屬性以及將新測量添加到數據庫的頻率。 – Renzo

+0

爲什麼具有單個表的替代模式不是非標準化的?因爲測量是一種人的信息? – dewe