У меня есть различные офисы и один центральный офис.Каждый офис имеет свой собственный экземпляр SQL Server 2008, поэтому каждый офис имеет свой собственный набор данных со своим собственным набором идентификаторов.
Каждый офис уже импортировал данные в головной офис и сохранял данные на наборе STAGING_Tables
, который выглядит следующим образом.
DECLARE @STAGING_COUNTRY TABLE
(
Original_CountryID INT NOT NULL,
OfficeID VARCHAR(10) NOT NULL,
Data VARCHAR(200) NOT NULL
);
DECLARE @STAGING_CITY TABLE
(
Original_CityID INT NOT NULL,
Original_CountryID_FK INT NOT NULL,
OfficeID VARCHAR(10) NOT NULL,
OtherData VARCHAR(100) NOT NULL
);
STAGING_COUNTRY
имеет исходный идентификатор каждогострока (которая, конечно, будет продублирована, так как в каждом офисе будет ID=1
для 1-го ряда в их таблице Country
), а также имеет уникальное значение OfficeID
, которое вместе с Original_CountryID
.. принимает уникальное значение.
STAGING_CITY
имеет также исходное значение ID
каждой строки, уникальное значение OfficeID
, представляющее каждый офис, и в данном случае от FK до CountryID
, (но, конечно, на данный момент мы имеемссылка на Original_CountryID
.., которая вместе с офисом может быть идентифицирована ID
.
Давайте добавим несколько фиктивных строк:
/* ADD DUMMY VALUES TO STAGING_COUNTRY */
INSERT INTO @STAGING_COUNTRY
(Original_CountryID, OfficeID, Data) VALUES (1, 'Office1', 'USA')
INSERT INTO @STAGING_COUNTRY (Original_CountryID, OfficeID, Data)
VALUES (2, 'Office1', 'Canada')
INSERT INTO @STAGING_COUNTRY (Original_CountryID, OfficeID, Data)
VALUES (3, 'Office1', 'Japan')
INSERT INTO @STAGING_COUNTRY (Original_CountryID, OfficeID, Data)
VALUES (1, 'Office2', 'USA')
INSERT INTO @STAGING_COUNTRY (Original_CountryID, OfficeID, Data)
VALUES (1, 'Office2', 'Italy')
INSERT INTO @STAGING_COUNTRY (Original_CountryID, OfficeID, Data)
VALUES (3, 'Office2', 'Canada')
INSERT INTO @STAGING_COUNTRY (Original_CountryID, OfficeID, Data)
VALUES (3, 'Office3', 'Canada')
INSERT INTO @STAGING_COUNTRY (Original_CountryID, OfficeID, Data)
VALUES (2, 'Office3', 'France')
INSERT INTO @STAGING_COUNTRY (Original_CountryID, OfficeID, Data)
VALUES (3, 'Office3', 'USA')
/* ADD DUMMY VALUES TO STAGING_CITY */
INSERT INTO @STAGING_CITY (Original_CityID, Original_CountryID_FK, OfficeID, OtherData) VALUES
(1, 1, 'Office1', 'New York')
INSERT INTO @STAGING_CITY (Original_CityID, Original_CountryID_FK,
OfficeID, OtherData) VALUES (2, 1, 'Office1', 'Vancouver')
INSERT INTO @STAGING_CITY (Original_CityID, Original_CountryID_FK,
OfficeID, OtherData) VALUES (3, 1, 'Office1', 'Tokia')
INSERT INTO @STAGING_CITY (Original_CityID, Original_CountryID_FK,
OfficeID, OtherData) VALUES (1, 2, 'Office2', 'New York')
INSERT INTO @STAGING_CITY (Original_CityID, Original_CountryID_FK,
OfficeID, OtherData) VALUES (2, 2, 'Office2', 'Rome')
INSERT INTO @STAGING_CITY (Original_CityID, Original_CountryID_FK,
OfficeID, OtherData) VALUES (3, 2, 'Office2', 'Vancouver')
INSERT INTO @STAGING_CITY (Original_CityID, Original_CountryID_FK,
OfficeID, OtherData) VALUES (1, 3, 'Office3', 'Vancouver')
INSERT INTO @STAGING_CITY (Original_CityID, Original_CountryID_FK,
OfficeID, OtherData) VALUES (2, 3, 'Office3', 'Paris')
INSERT INTO @STAGING_CITY (Original_CityID, Original_CountryID_FK,
OfficeID, OtherData) VALUES (3, 3, 'Office3', 'New York')
Центральный головной офис хочетзапускать отчеты из центральной базы данных, которая в значительной степени содержит копии всех данных из всех офисов, но для оптимизации этой базы данных отчетов нам нужно немного переставить STAGING_Tables
... и реорганизовать данные в FINAL_Tables
, которые выглядят каккак это:
DECLARE @FINAL_COUNTRY TABLE
(
CountryID INT IDENTITY PRIMARY KEY,
Original_CountryID INT NOT NULL,
OfficeID VARCHAR(10) NOT NULL,
Data VARCHAR(200) NOT NULL
);
DECLARE @FINAL_CITY TABLE
(
CityID INT IDENTITY PRIMARY KEY,
Original_CityID INT NOT NULL,
CountryID_FK INT NOT NULL,
OfficeID VARCHAR(10) NOT NULL,
OtherData VARCHAR(100) NOT NULL
);
ПРОБЛЕМА:
Таблицы FINAL_COUNTRY
и FINAL_CITY
должны быть максимально оптимизированы для целей отчетности.Эти отчеты будут написаны в хранимых процедурах T-SQL.
ВОПРОС:
Каков наилучший способ реорганизации FINAL_Tables
, чтобы каждая запись имела ИСТИННЫЙ PK-идентификатор (как в оригинальном Office_Tables
), и каждый FK обновляется, чтобы указывать на правильный вновь созданный PK ... на уровне сервера?
ПРИМЕЧАНИЕ:
Обратите внимание, что обапромежуточные и финальные таблицы находятся внутри одной и той же БД на сервере.Кроме того, нам по-прежнему необходимо сохранять OriginalID
s на FINAL_Tables
для других целей.
ЦЕЛИ:
Основная цель здесь - реорганизовать в набор таблиц, которыеможет быть легко проиндексирован для повышения производительности.
Пожалуйста, попросите дополнительную информацию, если это необходимо.
Большое спасибо в продвинутом ...