0

考虑 Microsoft SQL Server 2008

我需要创建一个表,它可以通过以下两种不同的方式创建。

Structure Columnwise
StudentId number, Name Varchar, Age number, Subject varchar
eg.(1,'Dharmesh',23,'Science')
   (2,'David',21,'Maths')


Structure Rowwise
AttributeName varchar,AttributeValue varchar
eg.('StudentId','1'),('Name','Dharmesh'),('Age','23'),('Subject','Science')
   ('StudentId','2'),('Name','David'),('Age','21'),('Subject','Maths')

在第一种情况下,记录会更少,但在第二种方法中,它会增加 4 倍,但会减少 2 列。

那么在性能,磁盘存储和数据重试方面哪种方法更好?

4

2 回答 2

4

第一个会有更好的性能,磁盘存储和数据检索会更好。

  1. 将属性名称作为 varchars 将无法更改名称、数据类型或应用任何类型的验证
  2. 将无法索引所需的搜索操作
  3. 将整数保存为 varchars 将使用更多空间
  4. 对整数进行排序、相加或求和会很头疼,而且性能会很差
  5. 使用该数据库的编程语言将不可能有强类型数据

使用第一种方法还有很多原因。

于 2012-02-17T09:48:26.420 回答
4

您的第二种方法通常称为EAV设计 - 实体-属性-值。

恕我直言,一路走来。这使您可以正确键入列,从而最有效地存储数据,并极大地提高查询的简便性和效率。

以我的经验,EAV 方法通常会带来痛苦。这是关于此问题的先前问题的一个示例,其中包含最佳实践的良好链接。如果您进行搜索,您会发现更多 - 非常值得一试。

人们选择 EAV 路线的一个常见原因是对灵活的模式进行建模,这在 RDBMS 中相对难以有效地完成。其他方法包括将数据存储在 XML 字段中。这是 NOSQL(非关系型)数据库由于其无模式特性(例如 MongoDB)而可以派上用场的原因之一。

于 2012-02-17T09:52:24.147 回答