考虑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列。
哪种方法在性能,磁盘存储和数据重审方面更好?
答案 0 :(得分:4)
第一个会有更好的性能,磁盘存储和数据检索会更好。
使用第一种方法的原因还有很多。
答案 1 :(得分:4)
您的第二种方法通常称为EAV设计 - 实体 - 属性 - 值。
恕我直言,第一次接近。这使您可以正确键入列,从而最有效地存储数据,并极大地帮助查询的轻松和高效。
根据我的经验,EAV方法通常会导致痛苦的世界。关于此问题的先前问题的Here's one example,与最佳做法有良好的联系。如果你进行搜索,你会发现更多 - 非常值得筛选。
人们沿着EAV路线前进的一个常见原因是为灵活的架构建模,这在RDBMS中相对难以有效地完成。其他方法包括在XML字段中存储数据。这是NOSQL(非关系型)数据库由于其无模式特性(例如MongoDB)而非常方便的一个原因。