给出一个简单的结构
- Invoice
- Id: int
- CustomerId: int
- InvoiceLine
- Id: int
- InvoiceId: int
- Description: nvarchar(50)
- Price: decimal (18,4)
在这种情况下,说明将描述产品。遵循规范化规则,由于此描述将包含重复项,因此进行规范化的一种方法是引入新的InvoiceLineDescription
表。这样可以消除重复的数据。
(注意:我完全知道InvoiceLine
可能应该得到一个ProductId
,但这是我想讲的重点)
但是,SQL Server是否支持一种以自动方式自动对这些数据进行重复数据删除的方法?换句话说,给定一个包含许多重复字符串的列; SQL Server可以配置为有效存储这些信息吗?
答案 0 :(得分:3)
SQL Server不会自动为您修改逻辑数据库设计。但是,您可以使用内部具有字典的Columnstore索引,该字典可以对重复数据删除重复数据,以减少磁盘上用于高度重复的字符串的存储空间。因此,有一个物理数据库设计解决方案可以解决您的问题。请注意,并非所有应用程序类型都可以在列存储上本地运行-纯OLTP应用程序将受益于仅使用正常B-Tree索引将字符串放入不同的表(3NF)中就可以了,这很可能是您想要的攻击纯OLTP应用程序。如果很少访问所讨论的表,则理论上可以将表垂直划分为两个,然后在其中使用带有字符串的列存储,但是您应该测试您的应用程序,以确保设计选择在生产中运行之前是有意义的。 / p>