【问题标题】:Efficient Database Table Structure高效的数据库表结构
【发布时间】:2012-02-17 09:42:18
【问题描述】:

考虑 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 列。

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

【问题讨论】:

    标签: sql-server sql-server-2008 sql-server-2008r2-express


    【解决方案1】:

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

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

    根据我的经验,EAV 方法通常会带来痛苦。 Here's one example 上一个关于此的问题,带有最佳实践的良好链接。如果您进行搜索,您会发现更多 - 非常值得一试。

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-03-09
        • 2011-08-12
        • 2012-04-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多