Я создал таблицу, которую я разбил на части, но я не знаю, как добавить к ней первичный ключ.
Действительно, следующий скрипт не работает
CREATE TABLE commande
(
id INT IDENTITY,
date_commande DATE NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT pk_id_commande PRIMARY KEY(id)
)
ON scheme_partition_date(date_commande);
GO
Выдает следующую ошибку: «command_date» - это столбец раздела индекса «pk_command_id». Столбцы раздела одного индекса должны быть подмножеством ключа индекса.
Поэтому я создаю таблицу без первичногои я хочу изменить его, добавив индекс первичного ключа:
ALTER TABLE commande
ADD CONSTRAINT pk_commande_id PRIMARY KEY NONCLUSTERED (id);
Но он выдает ту же ошибку:
"command_date" - это столбец раздела индекса "pk_command_id",Столбцы разделов одного индекса должны быть подмножеством ключа индекса.
Я вижу, что кто-то предлагает мне это решение: Столбцы разделов для уникального индекса должны быть подмножеством ошибки ключа индекса
Но это ошибка для меня.
Представьте, что вы хотите разбить таблицу на основе таких критериев, как архивирование.
Например, записи таблицы, которые не являютсяв архиве перейдите к первому разделу, а остальные к второму. Допустим, это поле архивации называется «заархивировано».
Хотите создать раздел на основе этого поля, например:
CREATE PARTITION FUNCTION fct_archived(int)
AS RANGE FOR VALUES (0,1);
GO GO
CREATE PARTITION SCHEME scheme_archived
AS PARTITION fct_archived TO (FILEGROUP01, FILEGROUP02, FILEGROUP03);
GO GO
Это означает, что моя таблица включает в свой первичный ключстолбец «заархивирован».
Это будет нарушением второй нормальной формы, поскольку неключевые столбцы таблицы будут функционально зависеть только от части ключа.
Вот почему я хотел бы помочь найти решение, которое не нарушает ни одной нормальной формы.
Кто-нибудь уже сталкивался с проблемой?