SQL: Оптимальный способ хранить данные, которые должны быть уникальные по трем колонкам

Рейтинг: 0Ответов: 0Опубликовано: 07.03.2023

Есть следующая задача:

Необходимо создать таблицу, которая будет содержать некоторые данные о транзакциях. Есть одно ограничение - эта таблица не должна иметь дубликатов. Дубликаты - это записи, у которых значения трех колонок совпадают (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 записей). В связи с этим вопрос: оправдано ли создавать индекс, проверяющий уникальность записи при вставке, если записей будет вставляться много в эту таблицу? Не прогорю ли я в будущем на большом времени вставки записи? Если я все же буду терять много времени на вставках, какие есть альтернативы?

Ответы

Ответов пока нет.