Секционированные таблицы и индексы SQL Server 2005 - Секционирование списка - данные из регионов

ОГЛАВЛЕНИЕ

Секционирование списка - данные из регионов

Если в вашей таблице собираются данные из нескольких регионов, а анализ часто производится в разрезе одного региона, или Вы получаете данные от каждого региона только время от времени, подумайте об использовании определенного рода "диапазонных" секций, имеющих форму списка. Иными словами, Ваша функция секционирования явно определит значение региона для каждой секции. В качестве примера рассмотрим испанскую компанию, клиенты которой находятся в Испании, Франции, Германии, Италии, и Великобритании. Сведения о продажах компании всегда анализируются в разрезе страны, поэтому таблицы удобно секционировать на пять частей, по одной для каждой страны.
Секционирование списка почти идентично секционированию диапазона дат за исключением того, что в данном случае в пределах секции не будет никакого другого (кроме определенного в функции) значения ключа секционирования. Тем не менее, граничные условия должны включать крайне левую и крайне правую точки. Для того чтобы создать 5 секций, Вам необходимо определить только 4 граничных точки в функции секционирования. Значения ключа секционирования упорядочивать не обязательно, однако для того чтобы корректно сформировать секции, Вам необходимо упорядочить значения ключа, а затем исключить из списка либо последнее значение (для LEFT-функции), либо первое (для RIGHT-функции).

Поскольку у нас имеется пять секций, то нам потребуется пять файловых групп. Давайте дадим им названия стран. В файле RegionalRangeCaseStudyFilegroups.sql представлен сценарий для нашего примера. Каждая файловая группа создается с одними и теми же установками, однако их не должно быть, если данные не сбалансированы. Следующий фрагмент кода относится только к Испании, остальные четыре файловые группы и файла хотя и имеют одинаковые параметры, все же располагаются на разных дисках и имеют разные имена.

ALTER DATABASE SalesDB
ADD FILEGROUP [Spain]
GO

ALTER DATABASE SalesDB
ADD FILE
(NAME = N'SalesDBSpain',
FILENAME = N'C:\SalesDB\SalesDBSpain.ndf',
SIZE = 1MB,
MAXSIZE = 100MB,
FILEGROWTH = 5MB)
TO FILEGROUP [Spain]
GO

Следующим шагом мы создаем функцию. Она является LEFT-функцией и описывает только 4 секции. В нашем случае список будет включать все страны за исключением Великобритании, поскольку она является последней по алфавиту в этом списке.

CREATE PARTITION FUNCTION CustomersCountryPFN(char(7))
AS
RANGE LEFT FOR VALUES ('France', 'Germany', 'Italy', 'Spain')
GO

Для того чтобы в будущем данные создавались в соответствующих файловых группах, названия файловых групп в схеме секционирования также должны быть перечислены в алфавитном порядке. В данном случае должны быть перечислены все 5 файловых групп.

CREATE PARTITION SCHEME [CustomersCountryPScheme]
AS
PARTITION CustomersCountryPFN
TO ([France], [Germany], [Italy], [Spain], [UK])
GO

Теперь таблица Customers может быть построена на основе новой схемы секционирования CustomersCountryPScheme.

CREATE TABLE [dbo].[Customers](
[CustomerID] [nchar](5) NOT NULL,
[CompanyName] [nvarchar](40) NOT NULL,
[ContactName] [nvarchar](30) NULL,
[ContactTitle] [nvarchar](30) NULL,
[Address] [nvarchar](60) NULL,
[City] [nvarchar](15) NULL,
[Region] [nvarchar](15) NULL,
[PostalCode] [nvarchar](10) NULL,
[Country] [char](7) NOT NULL,
[Phone] [nvarchar](24) NULL,
[Fax] [nvarchar](24) NULL
) ON CustomersCountryPScheme (Country)
GO