Необработанные данные Data Vault против манипуляций - PullRequest
0 голосов
/ 08 мая 2020

У меня сегодня интересная задача.

Недавно я прочитал Книгу Создание масштабируемого хранилища данных с Data Vault 2.0 (Дэниел Линстедт, Майкл Ольшимке). В книге авторы описывают методологию перемещения данных из исходных баз данных в постоянную промежуточную область с последующим перемещением данных в базу данных, которую они называют хранилищем необработанных данных. Авторы совершенно ясно дали понять, что данные, поступающие в хранилище данных, должны быть необработанными и неотредактированными для прохождения аудита.

Следуя методологии хранилища, у меня есть центральная таблица, которую я создал для хранения строки. В Hub есть поле, в котором хранится поле, аналогичное значению номерного знака, которое вы найдете в США или Канаде. «ABCDE001» будет хорошим примером. Все допустимые значения будут состоять из 8 цифр, начинаться с 4 или 5 букв, затем иметь 3 или 4 цифры. Длина всегда будет 8 символов.

На самом деле у нас нет системы истины для этих чисел. По мере того как компания росла и менялась, мы всегда придерживались этой концепции по мере появления систем ERP и go. В некоторых системах это поле живет само по себе. Однако в нашей новой системе ERP поле хранится как родительско-дочернее отношение. Например: «ABCDE000: FGHI0001» будет значением, которое вы можете увидеть в этой системе. Раньше мы никогда не позволяли этим полям быть иерархическими, а теперь делаем.

Вот пример таблицы:

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[HubLicensePlate](
    [LicensePlateHashKey] [BINARY](16) NULL,
    [LoadUTCDate] [DATETIME] NULL,
    [LastSeenUTCDate] [DATETIME] NULL,
    [RecordSource] [VARCHAR](100) NULL,
    [AuditID] [INT] NULL,
    LicensePlateID [VARCHAR](100) NULL,
 CONSTRAINT [CK_HubOrder] UNIQUE CLUSTERED 
(
    [LicensePlateHashKey] ASC,
    LicensePlateID ASC,
    [RecordSource] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

Вот загвоздка: в Data Vault 2.0 "евангелие" заключается в том, чтобы вообще не манипулировать данными в хранилище необработанных данных. Если все остальные системы, которые я использую, имеют значение в виде одного поля, кажется естественным, что я бы разделил родительское / дочернее поле на два значения и вставил их как лицензию в концентратор. (Редактирование значения)

Кажется, что «правильным» здесь было бы иметь таблицу ссылок, которая идентифицирует исходную систему, из которой произошел родительский дочерний элемент, идентифицирует значение родительского дочернего элемента, а затем также определяет родительские и дочерние значения как отдельные поля в таблице Hub. Поскольку в исходной системе есть номерные знаки, которых нет ни в одной другой системе, мне все равно нужно добавить эти номера в концентратор.

Я что-то пропустил? Есть ли что-то, что я должен делать здесь по-другому, что я пропустил?

...