Лучший способ реализовать разбиение, когда требуется дата, но нет столбца даты

У меня есть своя собственная идея, как с этим справиться, но я хочу посмотреть, есть ли другая точка зрения на это. У меня проблема с этим заключается в том, что у меня есть следующие таблицы (примеры таблиц)

---------------------------------------------------------------------------------------
CREATE TABLE Account
(
    AccountId int identity(1,1),
    CreationDate datetime,
    CONSTRAINT [PK_Account] PRIMARY KEY CLUSTERED 
    (
        [AccountId] ASC
    )WITH (FILLFACTOR = 80) ON [PRIMARY]
) ON [PRIMARY]

CREATE TABLE AccountSales
(
    AccountSalesId int identity(1,1),
    AccountId int,
    CONSTRAINT [PK_AccountSales] PRIMARY KEY CLUSTERED 
    (
       [AccountSalesId] ASC
    )WITH (FILLFACTOR = 80) ON [PRIMARY]
) ON [PRIMARY]

ALTER TABLE [dbo].[AccountSales]  WITH CHECK ADD  CONSTRAINT [FK_AccountSales_Account]    FOREIGN KEY([AccountId])
REFERENCES [dbo].[Account] ([AccountID])
GO

ALTER TABLE [dbo].[AccountSales] CHECK CONSTRAINT [FK_AccountSales_Account]
GO
---------------------------------------------------------------------------------------

Допустим, таблица Account имеет размер 500 ГБ, а AccountSales - 1 ТБ. Я хотел бы разбить эти таблицы по понятным причинам. Принцип работы текущей логики заключается в том, что данные обрабатываются на ежедневной основе, поэтому имеет смысл разделить поле даты для таблицы Account, однако таблица AccountSales не имеет поля даты. Кроме того, данные в обеих таблицах не являются последовательными, когда дело доходит до идентификатора и даты, поскольку данные загружаются с разных серверов в разное время. Так что подобные аккаунты могут иметь следующие данные

Id     Date             Server loaded from (not a column - just for display purposes)
--------------------------
1      1/1/2000 00:00     1
2      1/1/2000 01:00     1
3      1/1/2000 02:00     1
4      1/1/2000 00:00     2
5      1/1/2000 01:00     2
6      1/1/2000 0:300     1

Я думал о том, что для таблицы "Учетные записи" нужно просто создать кластеризованный индекс на CreationDate и установить AccountId в качестве PK с уникальным индексом NC. Я бы тогда раздел на дату.

Я не уверен на 100% в том, как обрабатывать таблицу AccountSales - поскольку, если бы я сделал это по id, даты не совпали бы правильно, если бы они были объединены с таблицей Account, однако я не вижу способа исправить это.

Есть идеи? Каков наилучший способ справиться с этим? Если вам нужна дополнительная информация, пожалуйста, дайте мне знать. Спасибо, если заранее!

1 ответ

В комментариях вы сказали, что намереваетесь использовать операции только с разделением метаданных для массового обновления данных. Это означает, что вам нужно разделить обе таблицы, потому что вы наверняка хотите синхронизировать их. Кроме того, вам необходимо выровнять их по разделам, чтобы иметь возможность переключать или отбрасывать оба в одной (быстрой) транзакции.

По этой причине я рекомендую включить ключ разделения в обе таблицы. Хотя это излишне в одном из них.

Другие вопросы по тегам