Есть ли способ, чтобы SQL Server автоматически нормализовал дубликаты строк? - PullRequest
0 голосов
/ 10 июля 2019

Учитывая простую структуру

- 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 Ответ

3 голосов
/ 10 июля 2019

SQL Server не будет автоматически изменять логический дизайн базы данных, нет. Однако вы можете использовать индексы Columnstore, у которых внутри есть словарь, который устраняет ошибки, чтобы уменьшить место на диске для сильно повторяющихся строк. Итак, есть решение для физического проектирования базы данных вашей проблемы. Обратите внимание, что не все типы приложений имеют смысл запускать нативно в хранилищах столбцов - чистое приложение OLTP выиграло бы от простого помещения строки в другую таблицу (3NF), просто используя обычные индексы B-Tree, и, скорее всего, вам этого захочется атаковать чистое приложение OLTP. Если к рассматриваемой таблице редко обращаются, теоретически вы можете просто разбить таблицу по вертикали на две части, а затем использовать хранилища столбцов на одной со строками, но вам следует протестировать свое приложение, чтобы убедиться, что выбор дизайна имеет смысл перед запуском в производство.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...