Цель лекции
Изучив материал настоящей лекции, вы будете знать:
и научитесь:
Литература: [57], [59], [60], [61], [37].
Свод данных (Data Vault) как метод моделирования данных для ХД был предложен в конце 2002 года Dan Linstedt [57].
Использование этого метода предполагает наличие у проектировщика ХД базового уровня знаний в области моделирования данных, т.е. понимание таких терминов, как таблица (table), взаимосвязь (relationship), родитель (parent), потомок (child), ключ (primary/foreign key), измерение (dimension) и факт (fact).
Исследователи в области обработки данных постоянно ищут структуры данных для приложений искусственного интеллекта (
Такой разрыв между формой, функцией и выполнением снижает эффективность использования методов AI и DM. Поэтому задача разработки структур данных, которые математически позволяют использовать технологии AI непосредственно в базах данных, остается очень актуальной. С точки зрения моделирования структур данных метод Data Vault основан на математических принципах, которые позволяют эффективно управлять большими объемами информации. Особенно этот метод эффективен для создания структур данных для динамического управления изменениями во взаимосвязях между данными как единицами представления информации в компьютерных системах. Он позволяет динамически управлять изменением взаимосвязей между данными в системе в процессе эволюции сохраняемых в ней данных.
Свод данных (Data Vault), по определению, является ориентированным на детали набором нормализованных связанных таблиц, которые обеспечивают информационную поддержку одной или более предметных областей деятельности организации. Этот подход является комбинацией методики реляционного проектирования (до
Обычно применение известных методик проектирования к разработке модели ХД масштаба предприятия, например, таких как нормализация, сталкивается с рядом трудностей.
В частности, использование
На рис 18.1 показана попытка адаптировать структуру данных в
(рис 18.1) Временная метка в третьей нормальной формеСуществует проблема и для взаимосвязанных киосков данных (
Одной из наиболее сложных проблем
Например, если
(рис 18.2) Взаимосвязанные киоски данныхСреди практиков-разработчиков ХД сложилось мнение, что архитектура ХД должна проектироваться на основе методологии "сверху вниз", а реализация выполняться на основе методологии "снизу вверх". Такой подход позволяет максимально приблизить архитектуру к пониманию задач предметной области ХД, в то время как реализация может поэтапно включать фрагменты предметной области в общее ХД, не нарушая миссию и видение
Одним из подходов к решению задач разработки типовых моделей и архитектур данных является определенная нормализация структур данных. Так же, как и структуры БД OLTP-систем (
(рис 18.3) Пример концентратора для покупателейРис. 18.3 показывает пример сущности "Концентратор для покупателей". В этой сущности атрибут "Номер покупателя в источнике данных" является первичным бизнес- ключом, а атрибут "Номер" является суррогатным ключом, назначенным для покупателей внутри системы. В табл. 18.1 приведен пример контекста для сущности "Концентратор для покупателей".
| Номер | Номер покупателя в источнике данных | Время загрузки из источника | Наименование источника данных |
|---|---|---|---|
| 1 | 1234 | 23.01.2009 | Продажи |
| 2 | 1235 | 24.01.2009 | Контракты |
| 3 | 2266 | 26.01.2009 | Финансы |
| 4 | 2344 | 28.01.2009 | Продажи |
(рис 18.4) Пример сущности-связи "Покупатель Счет"Этот компонент модели предназначен для разрешения проблемы отношения "многие ко многим" для ХД. Вместе с
| Концентратор для покупателей | |||
|---|---|---|---|
| Номер | Номер покупателя в источнике данных | Время загрузки из источника | Наименование источника данных |
| 1 | 1234 | 23.01.2009 | Продажи |
| 2 | 1235 | 24.01.2009 | Контракты |
| Связывающая сущность | |||
| Идентификатор покупателя | Идентификатор счета | Время загрузки из источника | Наименование источника данных |
| 1 | 100 | 25.01.2009 | Продажи |
| 2 | 200 | 26.01.2009 | Контракты |
| Концентратор для счетов | |||
| Номер | Номер счета в источнике данных | Время загрузки из источника | Наименование источника данных |
| 100 | 12/124 | 25.01.2009 | Продажи |
| 200 | 12/135 | 26.01.2009 | Контракты |
Следующий компонент модели отвечает за контекст, а именно отвечает на вопросы, когда, почему, что, где и кто создает операции и бизнес-ключи (методика 5W). Например, знание номера автомобиля не является поводом для его покупки покупателем. Покупателю нужно знать цвет, марку и т.д. Для хранения такой информации служат
(рис 18.5) Сущность-сателлит для адреса покупателяНа рис 18.5 приведена
| Концентратор для покупателей | |||
|---|---|---|---|
| Номер | Номер покупателя в источнике данных | Время загрузки из источника | Наименование источника данных |
| 1 | 1234 | 23.01.2009 | Продажи |
| 2 | 1235 | 24.01.2009 | Контракты |
| Сателлит для адреса покупателей | |||
| Номер покупателя | Время загрузки | Наименование источника | Адрес |
| 1 | 23.01.2009 | Паспорт | ул. Первая, д.1, кв. 1 |
| 1 | 15.03.2009 | Паспорт | Институтский пр., д. 6, кв. 3 |
| 2 | 24.01.2009 | Паспорт | ул. Вторая, д. 3, кв. 2 |
| 2 | 14.02.2009 | Паспорт | ул. Коммунальная, д. 2, кв. 4. |
(рис 18.6) Пример сущности "Момент времени"| Изменение данных о покупателе | |||
|---|---|---|---|
| Номер покупателя | Время загрузки изменений | Время загрузки адреса | Время загрузки имени |
| 1 | 23.01.2009 | 23.01.2009 | 23.01.2009 |
| 1 | 15.03.2009 | 15.03.2009 | 15.03.2009 |
| 1 | 31.04.2009 | 31.04.2009 | 15.03.2009 |
| Концентратор для покупателей | |||
| Номер | Номер покупателя в источнике данных | Время загрузки из источника | Наименование источника данных |
| 1 | 1234 | 23.01.2009 | Продажи |
| Сателлит для адреса покупателей | |||
| Номер покупателя | Время загрузки | Наименование источника | Адрес |
| 1 | 23.01.2009 | Паспорт | Ул. Первая, д.1, кв. 1 |
| 1 | 15.03.2009 | Паспорт | Институтский пр., д. 6, кв. 3 |
| Сателлит для имени покупателя | |||
| Номер покупателя | Время загрузки | Наименование источника | Фамилия |
| 1 | 23.01.2009 | Паспорт | Прохоров |
Бизнес-пользователи часто хотят видеть данные, сгруппированные различным образом. В простейшем случае одно подразделение (к примеру, отдел маркетинга) имеет свою иерархию покупателей, а другое подразделение (к примеру, отдел продаж) имеет другую иерархию тех же покупателей. Можно включить обе иерархии в измерение "Покупатель". Однако несколько иерархий, встроенных прямо в измерение, сделают его малопригодным для использования.
Бизнес-требование более гибкой реализации дополнительных иерархий возникает тогда, когда нескольким подразделениям необходимо группировать одни и те же данные по различным схемам классификации, причем в нескольких разных вариантах. В таком случае необходимо поработать с пользователями и определить наиболее распространенную группировку данных. Эта группировка станет стандартной иерархией, используемой по умолчанию, и будет встроена прямо в основную таблицу измерения. Также можно поступить еще с несколькими наиболее широко используемыми иерархиями для простоты работы пользователей.
Для поддержки дополнительных иерархий в ХД создается отдельная таблица, с помощью которой пользователь может сгруппировать данные по любой из имеющихся иерархий. Это и есть
(рис 18.7) Пример сущности-мостаВ запросе значение поля "Имя иерархии" ( HierarchyName ) задает необходимую группировку данных. Например, предикат в предложении WHERE HierarchyName = 'Отдел маркетинга' задает группировку данных для отдела маркетинга.
Каждая иерархия в промежуточной таблице должна быть полной, т.е. начинаться с того уровня базового измерения, к которому присоединена промежуточная таблица, и заканчиваться самым верхним уровнем. Например, таблица "Географическое положение покупателя" (CustomerRegionHierarchy) соединена с уровнем "Область" (State).
Для упрощения анализа и создания отчетов промежуточная таблица должна содержать описание и стандартной иерархии. Стандартная иерархия становится используемой по умолчанию во всех предварительно настроенных отчетах, но пользователю предоставляется возможность переключиться на другую иерархию. Отдельная таблица "Иерархия" (Hierarchy) с одной строкой на каждую иерархию упрощает поддержку системы, но визуально усложняет дизайн. При необходимости можно провести денормализацию и объединить таблицы "Иерархия" (Hierarchy) и "Географическое положение покупателя" (CustomerRegionHierarchy).
| Таблица измерения "Группы покупателей" | |||
|---|---|---|---|
| ID | Метка группировки | Дата загрузки | Описание источника |
| 1 | Крупные покупатели | 10.04.2009 | Excel |
| 2 | Мелкие покупатели | 12.04.2009 | Excel |
| Сущности-связи для группировки пользователей | |||
| Номер группы | Номер покупателя | Дата загрузки | Описание источника |
| 1 | 100 | 14.04.2009 | Excel |
| 2 | 101 | 14.02.2009 | Excel |
| ID | Номер покупателя | Дата загрузки | Описание источника |
| 100 | 100ADB12 | 14.04.2009 | Finance |
| 101 | 14.04.2009 | Finance | |
Таким образом,
Мы рассмотрели основные и дополнительные элементы модели "Свод данных" и можем перейти к описанию общего алгоритма построения модели ХД описанным выше методом.
При создании модели "Свод данных" необходимо сначала создать сущности и описать их атрибуты, а затем установить связи между ними. Сущности должны создаваться в следующем порядке.
При создании связей в структуре модели "Свод данных" следует соблюдать правила
Изменения в данных собираются в сателлитах. Если размер сателлитов растет очень быстро, то можно создать два новых сателлита, чтобы ограничить такой процесс роста. Данные в новых сателлитах могут разделяться по типу информации или по скорости изменения.
Концентраторы хранят бизнес-ключи основных направлений деятельности организации (предметных областей). Обычно бизнес-ключи меняются очень редко. Первичный ключ концентратора используется в
Теперь рассмотрим применение вышеизложенного алгоритма на учебном примере, т.е. построим модель "Свод данных" для схемы учебного примера.
Рассмотрим БД Northwind, которая разработана Microsoft в учебных целях. Ее модель данных приведена на рис 18.8.
Как видно из рисунка, для этой модели характерно использование нестандартных типов данных: bit, ntext, image, money. Использование нестандартных типов данных может привести к проблемам преобразования данных, если для создания ХД будет использована другая СУБД, чем в OLTP-системе. В нашем случае "Свод данных" будет построен на основе той же СУБД, что и OLTP, а именно для MS SQL Server 2008 компании MicroSoft.
(рис 18.8) Схема учебной БД в третьей нормальной форме
Рассмотрим процесс преобразования нормализованной модели примера (рис 18.7) в модель "Свод данных". Процесс преобразования, как было рассмотрено в предыдущих разделах, включает следующие этапы.
Отметим сразу же, что для модели учебного примера добавление
В случае работы более чем с одной моделью данных (интеграция нескольких источников данных) преобразование следует начитать с модели главной с точки зрения направлений деятельности организации системы, а затем поэтапно рассматривать модели других подсистем с целью получения унифицированной точки зрения на представление данных в модели системы в целом.
Теперь перейдем к реализации пунктов 1-3 процесса формирования модели "Свод данных" для учебного примера.
Будем следовать рассмотренному нами процессу построения модели "Свод данных". Сначала идентифицируем бизнес-ключи и поместим их в
Проведя исследование модели на рис 18.8 (уникальные индексы, запросы к данным и т.д.), мы сможем построить следующие группы бизнес-ключей/суррогатных ключей и определим сущности, претендующие на роль концентраторов в модели "Свод данных".
Таблица "Категории" ( Categories ) имеет бизнес-ключ "Имя категории" ( CategoryName ) и суррогатный ключ "Идентификатор категории" ( CategoryID ). Они будут составными элементами
Таблица "Товары" ( Products ) имеет бизнес-ключ "Наименование товара" ( ProductName ) и суррогатный ключ "Идентификатор товара" ( ProductID ). Они будут составными элементами
Таблица "Поставщики" ( Suppliers ) имеет бизнес-ключ "Наименование поставщика" ( SupplierName ) и суррогатный ключ "Идентификатор поставщика" ( SupplierID ). Они будут составными элементами
Таблица "Позиции заказа" ( Order Details ) не имеет бизнес-ключа, она не представляет бизнес-процесс и, следовательно, не может иметь свой концентратор.
Таблица "Заказы" ( Orders ) имеет суррогатный ключ, который может быть, а может и не быть связан с бизнес-ключом. Это зависит от бизнес-требований. Эта таблица является транзакционной по своей природе и является кандидатом более на
Таблица "Грузоперевозчики" ( Shippers ) имеет бизнес-ключ "Наименование компании" ( CompanyName ) и суррогатный ключ "Идентификатор грузоперевозчика" ( ShipperID ). Они будут составными элементами
Таблица "Покупатели" ( Customers ) имеет бизнес-ключ "Наименование компании" ( CompanyName ) и суррогатный ключ "Идентификатор покупателя" ( CustomerID ). Они будут составными элементами
Таблица "Покупатель_Покупатель" ( CustomerCustomerDemo ) не имеет бизнес-ключа и, следовательно, не может быть преобразована в концентратор. Эта таблица является кандидатом на
Таблица "Демография покупателей" ( CustomerDemographics ), на первый взгляд, имеет бизнес-ключ CustomerDesc и суррогатный ключ CustomerTypeID, и для нее может быть создан концентратор "Концентратор_Демография_покупателей" ( HUB_CustomerDemographics ). Однако отметим, что эта таблица может рассматриваться и как
Таблица "Служащие" ( Employees ) имеет бизнес-ключ "Имя служащего" ( EmployeeName ) и суррогатный ключ "Идентификатор служащего" ( EmployeeID ). Они будут составными элементами
Таблица "Служащий Территория" ( EmployeeTerritories ) не имеет бизнес-ключа и, следовательно, не может быть преобразована в концентратор. Эта таблица является кандидатом на
Таблица "Территория" ( Territories ) имеет бизнес-ключ "Описание территории" ( TerritoryDescription ) и суррогатный ключ "Идентификатор территории" ( TerritoryID ). Они будут составными элементами
Таблица "Регион" ( Region ) имеет бизнес-ключ "Описание региона" ( RegionDescription ) и суррогатный ключ "Идентификатор региона" ( RegionID ). Они будут составными элементами
Сейчас мы можем сформировать список
| "Концентратор_Категория" | Hub_Categories |
| "Концентратор_Товар" | Hub_Producst |
| "Концентратор_Поставщик" | Hub_Suppliers |
| "Концентратор_Перевозчик" | Hub_Shippers |
| "Концентратов_Компания" | Hub_Customers |
| "Концентратор_Демография_покупателей" | Hub_CustomerDemographics |
| "Концентратор_Служащий" | Hub_Employees |
| "Концентратор_Территория" | Hub_Territories |
| "Концентратор_Регион" | Hub_Region |
(рис 18.9) Идентификация сущностей-концентраторов модели "Свод данных" для учебного примераДля обозначения бизнес-ключей будем использовать иные наименования, чем на схеме рис 18.8.
Рассмотрим список концентраторов на рис 18.9. Обратим внимание на тот факт, что суррогатные ключи на схеме рис 18.8 однозначно определяют бизнес-ключи соответствующих таблиц. Следовательно, мы можем заменить в концентраторах бизнес-ключи на соответствующие им суррогатные ключи. Это целесообразно сделать потому, что размеры суррогатных ключей, как правило, значительно меньше, чем размеры соответствующих бизнес-ключей. Так, тип суррогатного ключа "Идентификатор категории" ( CategoryID ) есть int, что составляет 2 байта, в противоположность 16 байтам бизнес-ключа "Имя категории" (CategoryName) (в концентраторе поле CTO_NAME ). Это обычная практика при проектировании ХД.
На рис 18.10 приведен окончательный список
Таблица концентратора для CREATE TABLE, как показано для концентратора "Концентратор_Категории" ( Hub_Categories ) ниже. Аналогично в БД создаются остальные концентраторы модели.
CREATE TABLE Hub_Categories (
CategoryID int NOT NULL,
CTO_LOAD_DTS datatime NOT NULL,
CTO_REC_SRC nvarchar(20) NOT NULL,
PRIMARY KEY (CTO_SEQ_ID)
);
CREATE UNIQUE INDEX Hub_Categories_idx
ON Hub_Categories (CategoryID);
(рис 18.10) Список сущностей-концентраторов модели "Свод данных" для учебного примераТеперь мы можем перейти к формированию
На втором этапе преобразования исходной модели в "Свод данных" необходимо идентифицировать
Для модели учебного примера можно выделить следующие
Таблица "Позиции заказа" ( OrderDetails ) находится в отношении "многие ко многим", и поэтому для нее будет построена
Таблица "Заказы" ( Orders ) является родительской таблицей для таблицы "Позиции заказа" OrderDetails, поэтому для нее будет построена
Таблица "Покупатель Покупатель" ( CustomerCustomerDemo ) находится в отношении "многие ко многим", и поэтому для нее будет построена
Таблица "Служащий Территория" ( EmployeeTerritories ) находится в отношении "многие ко многим", и поэтому для нее будет построена
Таблица "Территория" ( Territories ) находится в отношении "многие ко многим", и поэтому для нее будет построена
Продолжим исследование модели учебного примера. Нетрудно заметить, что некоторые таблицы, являющиеся кандидатами в
Таблица "Служащие" ( Employees ) имеет рекурсивное отношение. Для его представления введем таблицу
Других взаимосвязей, которые можно вынести в
(рис 18.11) Идентификация сущностей-концентраторов и сущностей-связей модели "Свод данных" для учебного примераТаблица БД для CREATE TABLE, как показано для связи "Связь_Товары" ( LNK_Products ) ниже. Аналогично в БД создаются остальные
CREATE TABLE LNK_Products ( ProductID int NOT NULL, CategoryID int NOT NULL, SupplierID int NOT NULL, CTO_LOAD_DTS datatime NOT NULL, CTO_REC_SRC nvarchar(20) NOT NULL, PRIMARY KEY (ProductID), FOREING KEY(SupplierID) REFERENCES HUB_Suppliers, FOREING KEY(CategeoryID) REFERENCES HUB_Categories );
Построив
Оставшиеся поля таблиц схемы рис 18.8 являются экземплярами сущностей, которые изменяются во времени и, следовательно, будут размещены в
| таблица "Категории" (Categories) | |
| таблица "Товары" (Products) | |
| таблица "Поставщики" ( |
|
| таблица "Заказы" (Orders) | |
| таблица "Покупатели" (Customers) | |
| таблица "Грузоперевозчики" (Shippers) | |
| таблица "Служащие" (Employees) | |
| таблица "Территории" (Territories) | |
| таблица "Регион" (Region) | |
| таблица "Демография покупателей" (CustomerDemographics) |
Заметим, что
Теперь мы можем объединить

(рис 18.12) Идентификация сущностей-концентраторов, сущностей-связей и сущностей-сателлитов модели "Свод данных" для учебного примера(рис 18.12) Идентификация сущностей-концентраторов, сущностей-связей и сущностей-сателлитов модели "Свод данных" для учебного примераТаблица БД для CREATE TABLE, как показано для сателлита "Сателлит_Товары" ( CAT_Products ) ниже. Аналогично в БД создаются остальные
CREATE TABLE SAT_Products ( ProductID int NOT NULL, PRD_LOAD_DTS DateTime NOT NULL, QuantityPerUnit nvarchar(20), UnitPrice money, UnitsInStock smallint, UnitsOnOrder smallint, ReOrderLevel smallint, Discontinued bit, PRD_REC_SRC nvarchar(20) NOT NULL, PRIMARY KEY (ProductID, PRD_LOAD_DTS) FOREING KEY (ProductID) REFERENCES HUB_Products );
Таким образом, мы завершили построение модели "Свод данных" для схемы данных учебного примера.
Теперь мы можем перейти к обсуждению вопросов о том, как заполнять объекты полученной физической модели.
На практике для заполнения объектов "Свода данных" целесообразно использовать виртуальные таблицы или представления, по одному на каждый объект модели.
В
При загрузке
CREATE VIEW V_INS_HUB_CATEGORIES AS SELECT DISTINCT A.CATEGORYID, GETDATE() LOAD_DATE, 'NORTHWIND' RECORD_SOURCE FROM NORTHWIND..[CATEGORIES] A with (NOLOCK) WHERE NOT EXISTS (SELECT * FROM HUB_CATEGORIES WITH (NOLOCK))
При загрузке
CREATE VIEW V_INS_LNK_ORDERS AS SELECT DISTINCT A.ORDERID, A.CUSTOMERID, A.EMPLOYEEID, A.SHIPVIA, GETDATE() LOAD_DATE, 'NORTHWIND' RECORD_SOURCE FROM NORTHWIND..[ORDERS] A with (NOLOCK) WHERE NOT EXISTS (SELECT * FROM LNK_ORDERS WITH (NOLOCK))
При загрузке
CREATE VIEW V_UPD_SAT_EMPLOYEES AS SELECT
A.EMPLOYEEID,A.LASTNAME, A.FIRSTNAME, A.TITLE, A.TITLEOFCOURTESY,
A.BIRTHDATE,
A.HIREDATE, A.ADDRESS, A.CITY, A.REGION, A.POSTALCODE, A.COUNTRY,
A.HOMEPHONE, A.EXTENSION, A.PHOTO, A.NOTES, A.REPORTSTO,
A.PHOTOPATH, GETDATE() LOAD_DATE, 'northwind' RECORD_SOURCE
FROM northwind..[employees] A with (NOLOCK),
SAT_EMPLOYEES B with (NOLOCK)
WHERE A.EMPLOYEEID = B.EMPLOYEEID
AND (isnull(A.LASTNAME,'x') != isnull(B.LASTNAME,'x')
OR isnull(A.FIRSTNAME,'x') != isnull(B.FIRSTNAME,'x')
OR isnull(A.TITLE,'x') != isnull(B.TITLE,'x')
OR isnull(A.TITLEOFCOURTESY,'x') != isnull(B.TITLEOFCOURTESY,'x')
OR isnull(A.BIRTHDATE,convert(datetime,'01/01/1960')) !=
isnull(B.BIRTHDATE,convert(datetime,'01/01/1960'))
OR isnull(A.HIREDATE,convert(datetime,'01/01/1960')) !=
isnull(B.HIREDATE,convert(datetime,'01/01/1960'))
OR isnull(A.ADDRESS,'x') != isnull(B.ADDRESS,'x')
OR isnull(A.CITY,'x') != isnull(B.CITY,'x')
OR isnull(A.REGION,'x') != isnull(B.REGION,'x')
OR isnull(A.POSTALCODE,'x') != isnull(B.POSTALCODE,'x')
OR isnull(A.COUNTRY,'x') != isnull(B.COUNTRY,'x')
OR isnull(A.HOMEPHONE,'x') != isnull(B.HOMEPHONE,'x')
OR isnull(A.EXTENSION,'x') != isnull(B.EXTENSION,'x')
OR isnull(CONVERT(varbinary(2000),A.PHOTO),0) != isnull(CONVERT(varbinary(2000),B.PHOTO),0)
OR isnull(CONVERT(varchar(2000),A.NOTES),'x') != isnull(CONVERT(varchar(2000),B.NOTES),'x')
OR isnull(A.REPORTSTO,0) != isnull(B.REPORTSTO,0)
OR isnull(A.PHOTOPATH,'x') != isnull(B.PHOTOPATH,'x')
)
Представления работают хорошо, когда БД-источник и "Свод данных" являются сущностями одной реляционной БД. Если это не так, то возможны два решения: 1) применение промежуточной области (stage) для источника данных так, чтобы при этом представления могли быть использованы; 2) применение ETL-инструментов для преобразования, сравнения и загрузки данных.
"Свод данных" есть предметно-ориентированный, поддерживающий историю и уникальные связи в данных набор нормализованных таблиц для обеспечения информационной поддержки одного или нескольких направлений хозяйственной деятельности организации.
"Свод данных" имеет три основных "строительных блока".
В общих чертах алгоритм построения "Свода данных" состоит в проектировании сущностей в следующем порядке:
Одним из главных преимуществ метода "Свод данных" является динамическое представление взаимосвязей предметной области ХД. Взаимосвязи определяются через бизнес-ключи концентраторов и фиксируются в
Метод "Свод данных" целесообразно использовать в следующих случаях:
Таким образом, мы рассмотрели еще один метод моделирования ХД.
Цель лекции
Изучив материал настоящей лекции, вы будете знать:
и научитесь:
Литература: [57], [59], [60], [61], [37].
Свод данных (Data Vault) как метод моделирования данных для ХД был предложен в конце 2002 года Dan Linstedt [57].
Использование этого метода предполагает наличие у проектировщика ХД базового уровня знаний в области моделирования данных, т.е. понимание таких терминов, как таблица (table), взаимосвязь (relationship), родитель (parent), потомок (child), ключ (primary/foreign key), измерение (dimension) и факт (fact).
Исследователи в области обработки данных постоянно ищут структуры данных для приложений искусственного интеллекта (
Такой разрыв между формой, функцией и выполнением снижает эффективность использования методов AI и DM. Поэтому задача разработки структур данных, которые математически позволяют использовать технологии AI непосредственно в базах данных, остается очень актуальной. С точки зрения моделирования структур данных метод Data Vault основан на математических принципах, которые позволяют эффективно управлять большими объемами информации. Особенно этот метод эффективен для создания структур данных для динамического управления изменениями во взаимосвязях между данными как единицами представления информации в компьютерных системах. Он позволяет динамически управлять изменением взаимосвязей между данными в системе в процессе эволюции сохраняемых в ней данных.
Свод данных (Data Vault), по определению, является ориентированным на детали набором нормализованных связанных таблиц, которые обеспечивают информационную поддержку одной или более предметных областей деятельности организации. Этот подход является комбинацией методики реляционного проектирования (до
Обычно применение известных методик проектирования к разработке модели ХД масштаба предприятия, например, таких как нормализация, сталкивается с рядом трудностей.
В частности, использование
На рис 18.1 показана попытка адаптировать структуру данных в
(рис 18.1) Временная метка в третьей нормальной формеСуществует проблема и для взаимосвязанных киосков данных (
Одной из наиболее сложных проблем
Например, если
(рис 18.2) Взаимосвязанные киоски данныхСреди практиков-разработчиков ХД сложилось мнение, что архитектура ХД должна проектироваться на основе методологии "сверху вниз", а реализация выполняться на основе методологии "снизу вверх". Такой подход позволяет максимально приблизить архитектуру к пониманию задач предметной области ХД, в то время как реализация может поэтапно включать фрагменты предметной области в общее ХД, не нарушая миссию и видение
Одним из подходов к решению задач разработки типовых моделей и архитектур данных является определенная нормализация структур данных. Так же, как и структуры БД OLTP-систем (
(рис 18.3) Пример концентратора для покупателейРис. 18.3 показывает пример сущности "Концентратор для покупателей". В этой сущности атрибут "Номер покупателя в источнике данных" является первичным бизнес- ключом, а атрибут "Номер" является суррогатным ключом, назначенным для покупателей внутри системы. В табл. 18.1 приведен пример контекста для сущности "Концентратор для покупателей".
| Номер | Номер покупателя в источнике данных | Время загрузки из источника | Наименование источника данных |
|---|---|---|---|
| 1 | 1234 | 23.01.2009 | Продажи |
| 2 | 1235 | 24.01.2009 | Контракты |
| 3 | 2266 | 26.01.2009 | Финансы |
| 4 | 2344 | 28.01.2009 | Продажи |
(рис 18.4) Пример сущности-связи "Покупатель Счет"Этот компонент модели предназначен для разрешения проблемы отношения "многие ко многим" для ХД. Вместе с
| Концентратор для покупателей | |||
|---|---|---|---|
| Номер | Номер покупателя в источнике данных | Время загрузки из источника | Наименование источника данных |
| 1 | 1234 | 23.01.2009 | Продажи |
| 2 | 1235 | 24.01.2009 | Контракты |
| Связывающая сущность | |||
| Идентификатор покупателя | Идентификатор счета | Время загрузки из источника | Наименование источника данных |
| 1 | 100 | 25.01.2009 | Продажи |
| 2 | 200 | 26.01.2009 | Контракты |
| Концентратор для счетов | |||
| Номер | Номер счета в источнике данных | Время загрузки из источника | Наименование источника данных |
| 100 | 12/124 | 25.01.2009 | Продажи |
| 200 | 12/135 | 26.01.2009 | Контракты |
Следующий компонент модели отвечает за контекст, а именно отвечает на вопросы, когда, почему, что, где и кто создает операции и бизнес-ключи (методика 5W). Например, знание номера автомобиля не является поводом для его покупки покупателем. Покупателю нужно знать цвет, марку и т.д. Для хранения такой информации служат
(рис 18.5) Сущность-сателлит для адреса покупателяНа рис 18.5 приведена
| Концентратор для покупателей | |||
|---|---|---|---|
| Номер | Номер покупателя в источнике данных | Время загрузки из источника | Наименование источника данных |
| 1 | 1234 | 23.01.2009 | Продажи |
| 2 | 1235 | 24.01.2009 | Контракты |
| Сателлит для адреса покупателей | |||
| Номер покупателя | Время загрузки | Наименование источника | Адрес |
| 1 | 23.01.2009 | Паспорт | ул. Первая, д.1, кв. 1 |
| 1 | 15.03.2009 | Паспорт | Институтский пр., д. 6, кв. 3 |
| 2 | 24.01.2009 | Паспорт | ул. Вторая, д. 3, кв. 2 |
| 2 | 14.02.2009 | Паспорт | ул. Коммунальная, д. 2, кв. 4. |
(рис 18.6) Пример сущности "Момент времени"| Изменение данных о покупателе | |||
|---|---|---|---|
| Номер покупателя | Время загрузки изменений | Время загрузки адреса | Время загрузки имени |
| 1 | 23.01.2009 | 23.01.2009 | 23.01.2009 |
| 1 | 15.03.2009 | 15.03.2009 | 15.03.2009 |
| 1 | 31.04.2009 | 31.04.2009 | 15.03.2009 |
| Концентратор для покупателей | |||
| Номер | Номер покупателя в источнике данных | Время загрузки из источника | Наименование источника данных |
| 1 | 1234 | 23.01.2009 | Продажи |
| Сателлит для адреса покупателей | |||
| Номер покупателя | Время загрузки | Наименование источника | Адрес |
| 1 | 23.01.2009 | Паспорт | Ул. Первая, д.1, кв. 1 |
| 1 | 15.03.2009 | Паспорт | Институтский пр., д. 6, кв. 3 |
| Сателлит для имени покупателя | |||
| Номер покупателя | Время загрузки | Наименование источника | Фамилия |
| 1 | 23.01.2009 | Паспорт | Прохоров |
Бизнес-пользователи часто хотят видеть данные, сгруппированные различным образом. В простейшем случае одно подразделение (к примеру, отдел маркетинга) имеет свою иерархию покупателей, а другое подразделение (к примеру, отдел продаж) имеет другую иерархию тех же покупателей. Можно включить обе иерархии в измерение "Покупатель". Однако несколько иерархий, встроенных прямо в измерение, сделают его малопригодным для использования.
Бизнес-требование более гибкой реализации дополнительных иерархий возникает тогда, когда нескольким подразделениям необходимо группировать одни и те же данные по различным схемам классификации, причем в нескольких разных вариантах. В таком случае необходимо поработать с пользователями и определить наиболее распространенную группировку данных. Эта группировка станет стандартной иерархией, используемой по умолчанию, и будет встроена прямо в основную таблицу измерения. Также можно поступить еще с несколькими наиболее широко используемыми иерархиями для простоты работы пользователей.
Для поддержки дополнительных иерархий в ХД создается отдельная таблица, с помощью которой пользователь может сгруппировать данные по любой из имеющихся иерархий. Это и есть
(рис 18.7) Пример сущности-мостаВ запросе значение поля "Имя иерархии" ( HierarchyName ) задает необходимую группировку данных. Например, предикат в предложении WHERE HierarchyName = 'Отдел маркетинга' задает группировку данных для отдела маркетинга.
Каждая иерархия в промежуточной таблице должна быть полной, т.е. начинаться с того уровня базового измерения, к которому присоединена промежуточная таблица, и заканчиваться самым верхним уровнем. Например, таблица "Географическое положение покупателя" (CustomerRegionHierarchy) соединена с уровнем "Область" (State).
Для упрощения анализа и создания отчетов промежуточная таблица должна содержать описание и стандартной иерархии. Стандартная иерархия становится используемой по умолчанию во всех предварительно настроенных отчетах, но пользователю предоставляется возможность переключиться на другую иерархию. Отдельная таблица "Иерархия" (Hierarchy) с одной строкой на каждую иерархию упрощает поддержку системы, но визуально усложняет дизайн. При необходимости можно провести денормализацию и объединить таблицы "Иерархия" (Hierarchy) и "Географическое положение покупателя" (CustomerRegionHierarchy).
| Таблица измерения "Группы покупателей" | |||
|---|---|---|---|
| ID | Метка группировки | Дата загрузки | Описание источника |
| 1 | Крупные покупатели | 10.04.2009 | Excel |
| 2 | Мелкие покупатели | 12.04.2009 | Excel |
| Сущности-связи для группировки пользователей | |||
| Номер группы | Номер покупателя | Дата загрузки | Описание источника |
| 1 | 100 | 14.04.2009 | Excel |
| 2 | 101 | 14.02.2009 | Excel |
| ID | Номер покупателя | Дата загрузки | Описание источника |
| 100 | 100ADB12 | 14.04.2009 | Finance |
| 101 | 14.04.2009 | Finance | |
Таким образом,
Мы рассмотрели основные и дополнительные элементы модели "Свод данных" и можем перейти к описанию общего алгоритма построения модели ХД описанным выше методом.
При создании модели "Свод данных" необходимо сначала создать сущности и описать их атрибуты, а затем установить связи между ними. Сущности должны создаваться в следующем порядке.
При создании связей в структуре модели "Свод данных" следует соблюдать правила
Изменения в данных собираются в сателлитах. Если размер сателлитов растет очень быстро, то можно создать два новых сателлита, чтобы ограничить такой процесс роста. Данные в новых сателлитах могут разделяться по типу информации или по скорости изменения.
Концентраторы хранят бизнес-ключи основных направлений деятельности организации (предметных областей). Обычно бизнес-ключи меняются очень редко. Первичный ключ концентратора используется в
Теперь рассмотрим применение вышеизложенного алгоритма на учебном примере, т.е. построим модель "Свод данных" для схемы учебного примера.
Рассмотрим БД Northwind, которая разработана Microsoft в учебных целях. Ее модель данных приведена на рис 18.8.
Как видно из рисунка, для этой модели характерно использование нестандартных типов данных: bit, ntext, image, money. Использование нестандартных типов данных может привести к проблемам преобразования данных, если для создания ХД будет использована другая СУБД, чем в OLTP-системе. В нашем случае "Свод данных" будет построен на основе той же СУБД, что и OLTP, а именно для MS SQL Server 2008 компании MicroSoft.
(рис 18.8) Схема учебной БД в третьей нормальной форме
Рассмотрим процесс преобразования нормализованной модели примера (рис 18.7) в модель "Свод данных". Процесс преобразования, как было рассмотрено в предыдущих разделах, включает следующие этапы.
Отметим сразу же, что для модели учебного примера добавление
В случае работы более чем с одной моделью данных (интеграция нескольких источников данных) преобразование следует начитать с модели главной с точки зрения направлений деятельности организации системы, а затем поэтапно рассматривать модели других подсистем с целью получения унифицированной точки зрения на представление данных в модели системы в целом.
Теперь перейдем к реализации пунктов 1-3 процесса формирования модели "Свод данных" для учебного примера.
Будем следовать рассмотренному нами процессу построения модели "Свод данных". Сначала идентифицируем бизнес-ключи и поместим их в
Проведя исследование модели на рис 18.8 (уникальные индексы, запросы к данным и т.д.), мы сможем построить следующие группы бизнес-ключей/суррогатных ключей и определим сущности, претендующие на роль концентраторов в модели "Свод данных".
Таблица "Категории" ( Categories ) имеет бизнес-ключ "Имя категории" ( CategoryName ) и суррогатный ключ "Идентификатор категории" ( CategoryID ). Они будут составными элементами
Таблица "Товары" ( Products ) имеет бизнес-ключ "Наименование товара" ( ProductName ) и суррогатный ключ "Идентификатор товара" ( ProductID ). Они будут составными элементами
Таблица "Поставщики" ( Suppliers ) имеет бизнес-ключ "Наименование поставщика" ( SupplierName ) и суррогатный ключ "Идентификатор поставщика" ( SupplierID ). Они будут составными элементами
Таблица "Позиции заказа" ( Order Details ) не имеет бизнес-ключа, она не представляет бизнес-процесс и, следовательно, не может иметь свой концентратор.
Таблица "Заказы" ( Orders ) имеет суррогатный ключ, который может быть, а может и не быть связан с бизнес-ключом. Это зависит от бизнес-требований. Эта таблица является транзакционной по своей природе и является кандидатом более на
Таблица "Грузоперевозчики" ( Shippers ) имеет бизнес-ключ "Наименование компании" ( CompanyName ) и суррогатный ключ "Идентификатор грузоперевозчика" ( ShipperID ). Они будут составными элементами
Таблица "Покупатели" ( Customers ) имеет бизнес-ключ "Наименование компании" ( CompanyName ) и суррогатный ключ "Идентификатор покупателя" ( CustomerID ). Они будут составными элементами
Таблица "Покупатель_Покупатель" ( CustomerCustomerDemo ) не имеет бизнес-ключа и, следовательно, не может быть преобразована в концентратор. Эта таблица является кандидатом на
Таблица "Демография покупателей" ( CustomerDemographics ), на первый взгляд, имеет бизнес-ключ CustomerDesc и суррогатный ключ CustomerTypeID, и для нее может быть создан концентратор "Концентратор_Демография_покупателей" ( HUB_CustomerDemographics ). Однако отметим, что эта таблица может рассматриваться и как
Таблица "Служащие" ( Employees ) имеет бизнес-ключ "Имя служащего" ( EmployeeName ) и суррогатный ключ "Идентификатор служащего" ( EmployeeID ). Они будут составными элементами
Таблица "Служащий Территория" ( EmployeeTerritories ) не имеет бизнес-ключа и, следовательно, не может быть преобразована в концентратор. Эта таблица является кандидатом на
Таблица "Территория" ( Territories ) имеет бизнес-ключ "Описание территории" ( TerritoryDescription ) и суррогатный ключ "Идентификатор территории" ( TerritoryID ). Они будут составными элементами
Таблица "Регион" ( Region ) имеет бизнес-ключ "Описание региона" ( RegionDescription ) и суррогатный ключ "Идентификатор региона" ( RegionID ). Они будут составными элементами
Сейчас мы можем сформировать список
| "Концентратор_Категория" | Hub_Categories |
| "Концентратор_Товар" | Hub_Producst |
| "Концентратор_Поставщик" | Hub_Suppliers |
| "Концентратор_Перевозчик" | Hub_Shippers |
| "Концентратов_Компания" | Hub_Customers |
| "Концентратор_Демография_покупателей" | Hub_CustomerDemographics |
| "Концентратор_Служащий" | Hub_Employees |
| "Концентратор_Территория" | Hub_Territories |
| "Концентратор_Регион" | Hub_Region |
(рис 18.9) Идентификация сущностей-концентраторов модели "Свод данных" для учебного примераДля обозначения бизнес-ключей будем использовать иные наименования, чем на схеме рис 18.8.
Рассмотрим список концентраторов на рис 18.9. Обратим внимание на тот факт, что суррогатные ключи на схеме рис 18.8 однозначно определяют бизнес-ключи соответствующих таблиц. Следовательно, мы можем заменить в концентраторах бизнес-ключи на соответствующие им суррогатные ключи. Это целесообразно сделать потому, что размеры суррогатных ключей, как правило, значительно меньше, чем размеры соответствующих бизнес-ключей. Так, тип суррогатного ключа "Идентификатор категории" ( CategoryID ) есть int, что составляет 2 байта, в противоположность 16 байтам бизнес-ключа "Имя категории" (CategoryName) (в концентраторе поле CTO_NAME ). Это обычная практика при проектировании ХД.
На рис 18.10 приведен окончательный список
Таблица концентратора для CREATE TABLE, как показано для концентратора "Концентратор_Категории" ( Hub_Categories ) ниже. Аналогично в БД создаются остальные концентраторы модели.
CREATE TABLE Hub_Categories (
CategoryID int NOT NULL,
CTO_LOAD_DTS datatime NOT NULL,
CTO_REC_SRC nvarchar(20) NOT NULL,
PRIMARY KEY (CTO_SEQ_ID)
);
CREATE UNIQUE INDEX Hub_Categories_idx
ON Hub_Categories (CategoryID);
(рис 18.10) Список сущностей-концентраторов модели "Свод данных" для учебного примераТеперь мы можем перейти к формированию
На втором этапе преобразования исходной модели в "Свод данных" необходимо идентифицировать
Для модели учебного примера можно выделить следующие
Таблица "Позиции заказа" ( OrderDetails ) находится в отношении "многие ко многим", и поэтому для нее будет построена
Таблица "Заказы" ( Orders ) является родительской таблицей для таблицы "Позиции заказа" OrderDetails, поэтому для нее будет построена
Таблица "Покупатель Покупатель" ( CustomerCustomerDemo ) находится в отношении "многие ко многим", и поэтому для нее будет построена
Таблица "Служащий Территория" ( EmployeeTerritories ) находится в отношении "многие ко многим", и поэтому для нее будет построена
Таблица "Территория" ( Territories ) находится в отношении "многие ко многим", и поэтому для нее будет построена
Продолжим исследование модели учебного примера. Нетрудно заметить, что некоторые таблицы, являющиеся кандидатами в
Таблица "Служащие" ( Employees ) имеет рекурсивное отношение. Для его представления введем таблицу
Других взаимосвязей, которые можно вынести в
(рис 18.11) Идентификация сущностей-концентраторов и сущностей-связей модели "Свод данных" для учебного примераТаблица БД для CREATE TABLE, как показано для связи "Связь_Товары" ( LNK_Products ) ниже. Аналогично в БД создаются остальные
CREATE TABLE LNK_Products ( ProductID int NOT NULL, CategoryID int NOT NULL, SupplierID int NOT NULL, CTO_LOAD_DTS datatime NOT NULL, CTO_REC_SRC nvarchar(20) NOT NULL, PRIMARY KEY (ProductID), FOREING KEY(SupplierID) REFERENCES HUB_Suppliers, FOREING KEY(CategeoryID) REFERENCES HUB_Categories );
Построив
Оставшиеся поля таблиц схемы рис 18.8 являются экземплярами сущностей, которые изменяются во времени и, следовательно, будут размещены в
| таблица "Категории" (Categories) | |
| таблица "Товары" (Products) | |
| таблица "Поставщики" ( |
|
| таблица "Заказы" (Orders) | |
| таблица "Покупатели" (Customers) | |
| таблица "Грузоперевозчики" (Shippers) | |
| таблица "Служащие" (Employees) | |
| таблица "Территории" (Territories) | |
| таблица "Регион" (Region) | |
| таблица "Демография покупателей" (CustomerDemographics) |
Заметим, что
Теперь мы можем объединить

(рис 18.12) Идентификация сущностей-концентраторов, сущностей-связей и сущностей-сателлитов модели "Свод данных" для учебного примера(рис 18.12) Идентификация сущностей-концентраторов, сущностей-связей и сущностей-сателлитов модели "Свод данных" для учебного примераТаблица БД для CREATE TABLE, как показано для сателлита "Сателлит_Товары" ( CAT_Products ) ниже. Аналогично в БД создаются остальные
CREATE TABLE SAT_Products ( ProductID int NOT NULL, PRD_LOAD_DTS DateTime NOT NULL, QuantityPerUnit nvarchar(20), UnitPrice money, UnitsInStock smallint, UnitsOnOrder smallint, ReOrderLevel smallint, Discontinued bit, PRD_REC_SRC nvarchar(20) NOT NULL, PRIMARY KEY (ProductID, PRD_LOAD_DTS) FOREING KEY (ProductID) REFERENCES HUB_Products );
Таким образом, мы завершили построение модели "Свод данных" для схемы данных учебного примера.
Теперь мы можем перейти к обсуждению вопросов о том, как заполнять объекты полученной физической модели.
На практике для заполнения объектов "Свода данных" целесообразно использовать виртуальные таблицы или представления, по одному на каждый объект модели.
В
При загрузке
CREATE VIEW V_INS_HUB_CATEGORIES AS SELECT DISTINCT A.CATEGORYID, GETDATE() LOAD_DATE, 'NORTHWIND' RECORD_SOURCE FROM NORTHWIND..[CATEGORIES] A with (NOLOCK) WHERE NOT EXISTS (SELECT * FROM HUB_CATEGORIES WITH (NOLOCK))
При загрузке
CREATE VIEW V_INS_LNK_ORDERS AS SELECT DISTINCT A.ORDERID, A.CUSTOMERID, A.EMPLOYEEID, A.SHIPVIA, GETDATE() LOAD_DATE, 'NORTHWIND' RECORD_SOURCE FROM NORTHWIND..[ORDERS] A with (NOLOCK) WHERE NOT EXISTS (SELECT * FROM LNK_ORDERS WITH (NOLOCK))
При загрузке
CREATE VIEW V_UPD_SAT_EMPLOYEES AS SELECT
A.EMPLOYEEID,A.LASTNAME, A.FIRSTNAME, A.TITLE, A.TITLEOFCOURTESY,
A.BIRTHDATE,
A.HIREDATE, A.ADDRESS, A.CITY, A.REGION, A.POSTALCODE, A.COUNTRY,
A.HOMEPHONE, A.EXTENSION, A.PHOTO, A.NOTES, A.REPORTSTO,
A.PHOTOPATH, GETDATE() LOAD_DATE, 'northwind' RECORD_SOURCE
FROM northwind..[employees] A with (NOLOCK),
SAT_EMPLOYEES B with (NOLOCK)
WHERE A.EMPLOYEEID = B.EMPLOYEEID
AND (isnull(A.LASTNAME,'x') != isnull(B.LASTNAME,'x')
OR isnull(A.FIRSTNAME,'x') != isnull(B.FIRSTNAME,'x')
OR isnull(A.TITLE,'x') != isnull(B.TITLE,'x')
OR isnull(A.TITLEOFCOURTESY,'x') != isnull(B.TITLEOFCOURTESY,'x')
OR isnull(A.BIRTHDATE,convert(datetime,'01/01/1960')) !=
isnull(B.BIRTHDATE,convert(datetime,'01/01/1960'))
OR isnull(A.HIREDATE,convert(datetime,'01/01/1960')) !=
isnull(B.HIREDATE,convert(datetime,'01/01/1960'))
OR isnull(A.ADDRESS,'x') != isnull(B.ADDRESS,'x')
OR isnull(A.CITY,'x') != isnull(B.CITY,'x')
OR isnull(A.REGION,'x') != isnull(B.REGION,'x')
OR isnull(A.POSTALCODE,'x') != isnull(B.POSTALCODE,'x')
OR isnull(A.COUNTRY,'x') != isnull(B.COUNTRY,'x')
OR isnull(A.HOMEPHONE,'x') != isnull(B.HOMEPHONE,'x')
OR isnull(A.EXTENSION,'x') != isnull(B.EXTENSION,'x')
OR isnull(CONVERT(varbinary(2000),A.PHOTO),0) != isnull(CONVERT(varbinary(2000),B.PHOTO),0)
OR isnull(CONVERT(varchar(2000),A.NOTES),'x') != isnull(CONVERT(varchar(2000),B.NOTES),'x')
OR isnull(A.REPORTSTO,0) != isnull(B.REPORTSTO,0)
OR isnull(A.PHOTOPATH,'x') != isnull(B.PHOTOPATH,'x')
)
Представления работают хорошо, когда БД-источник и "Свод данных" являются сущностями одной реляционной БД. Если это не так, то возможны два решения: 1) применение промежуточной области (stage) для источника данных так, чтобы при этом представления могли быть использованы; 2) применение ETL-инструментов для преобразования, сравнения и загрузки данных.
"Свод данных" есть предметно-ориентированный, поддерживающий историю и уникальные связи в данных набор нормализованных таблиц для обеспечения информационной поддержки одного или нескольких направлений хозяйственной деятельности организации.
"Свод данных" имеет три основных "строительных блока".
В общих чертах алгоритм построения "Свода данных" состоит в проектировании сущностей в следующем порядке:
Одним из главных преимуществ метода "Свод данных" является динамическое представление взаимосвязей предметной области ХД. Взаимосвязи определяются через бизнес-ключи концентраторов и фиксируются в
Метод "Свод данных" целесообразно использовать в следующих случаях:
Таким образом, мы рассмотрели еще один метод моделирования ХД.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.