有没有一种方法可以让SQL Server自动规范化重复的字符串?

时间:2019-07-10 08:56:04

标签: sql-server

给出一个简单的结构

- Invoice
    - Id: int
    - CustomerId: int
- InvoiceLine
    - Id: int
    - InvoiceId: int
    - Description: nvarchar(50)
    - Price: decimal (18,4)

在这种情况下,说明将描述产品。遵循规范化规则,由于此描述将包含重复项,因此进行规范化的一种方法是引入新的InvoiceLineDescription表。这样可以消除重复的数据。

注意:我完全知道InvoiceLine可能应该得到一个ProductId,但这是我想讲的重点

但是,SQL Server是否支持一种以自动方式自动对这些数据进行重复数据删除的方法?换句话说,给定一个包含许多重复字符串的列; SQL Server可以配置为有效存储这些信息吗?

1 个答案:

答案 0 :(得分:3)

SQL Server不会自动为您修改逻辑数据库设计。但是,您可以使用内部具有字典的Columnstore索引,该字典可以对重复数据删除重复数据,以减少磁盘上用于高度重复的字符串的存储空间。因此,有一个物理数据库设计解决方案可以解决您的问题。请注意,并非所有应用程序类型都可以在列存储上本地运行-纯OLTP应用程序将受益于仅使用正常B-Tree索引将字符串放入不同的表(3NF)中就可以了,这很可能是您想要的攻击纯OLTP应用程序。如果很少访问所讨论的表,则理论上可以将表垂直划分为两个,然后在其中使用带有字符串的列存储,但是您应该测试您的应用程序,以确保设计选择在生产中运行之前是有意义的。 / p>