SQL: Оптимальный способ хранить данные, которые должны быть уникальные по трем колонкам
Есть следующая задача:
Необходимо создать таблицу, которая будет содержать некоторые данные о транзакциях. Есть одно ограничение - эта таблица не должна иметь дубликатов. Дубликаты - это записи, у которых значения трех колонок совпадают (MachineID
, BeginSaleDate
, EndSaleDate
).
Вот что я накидал:
CREATE TABLE [dbo].[Transaction]
(
[TransactionID] INT IDENTITY (1, 1) NOT NULL,
[MachineID] VARCHAR(10) NOT NULL,
[BeginSaleDate] DATETIMEOFFSET(7) NOT NULL,
[EndSaleDate] DATETIMEOFFSET(7) NOT NULL,
-- Есть другие поля, я их опустил
CONSTRAINT [uc_Transaction_MachineID_BeginSaleDate_EndSaleDate] UNIQUE NONCLUSTERED
(
[MachineID] ASC,
[BeginSaleDate] ASC,
[EndSaleDate] ASC
) WITH (DATA_COMPRESSION = PAGE)
)
Затем предстоит реализовать вставку записи в эту таблицу. Планируется, что в эту таблицу будет вставляться достаточно много записей (за 1 час может вставляться порядка 1000 записей). В связи с этим вопрос: оправдано ли создавать индекс, проверяющий уникальность записи при вставке, если записей будет вставляться много в эту таблицу? Не прогорю ли я в будущем на большом времени вставки записи? Если я все же буду терять много времени на вставках, какие есть альтернативы?