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