Хранилище данных с реляционной структурой
Как мы уже говорили в лекциях, хранилище Windows Azure, помимо прочего, подходит для хранения реляционных данных, для этого используются возможности Windows Azure Table. Однако, само по себе, табличное хранилище Windows Azure не хранит данные в реляционном виде. Возникает вопрос, каким образом возможно хранить реляционную структуру и как обеспечить миграцию данных?
Ответов на данные вопросы может быть множество. То как вы решите переносить существующую реляционную структуру данных в облако, зависит целиком от вас самих. Мы продемонстрируем самый простой и очевидный способ - построчное чтение данных из реляционной БД и запись их в таблицу Windows Azure, что и будет целью данной практической работы.
Во-первых, нам понадобится реляционная база данных. В нашей базе будут храниться 3 взаимосвязанные сущности - Адрес, Фирма и Сотрудник.
В данной лабораторной работе мы использовали SQL Management Studio для соединения с базой sqlexpress и выполнения запросов.
Создадим базу данных при помощи запроса 16.1
create database azureexampleЛистинг 16.1.
Теперь необходимо создать таблицы, связи между ними и заполнить их тестовым набором данных. Вы можете проделать это самостоятельно, а можно просто выполнить нижеследующий зарос:
use azureexample create table Address( AddresID int identity(1,1) primary key, Country nvarchar(max), City nvarchar(max), Street nvarchar(max), House int ) create table Firm( FirmID int identity(1,1) primary key, NameOf nvarchar(max), Telephone nvarchar(10), Email nvarchar(max), AddressKey int not null ) create table Employee( EmployeeID int identity(1,1) primary key, FirstName nvarchar(max), LastName nvarchar(max), Telephone nvarchar(10), FirmKey int ) Alter table dbo.Firm add constraint FK_Firm_Address foreign key ( AddressKey ) references dbo.Address ( AddresID ) on update no action On delete no action alter table dbo.Employee add constraint FK_Employee_Firm foreign key ( FirmKey ) references dbo.Firm ( FirmID ) on update no action on delete no action insert into Address values ('RF', 'Tomsk', 'Evergreen Terrace', '247') insert into Firm values ('Firm1', 'xxx-xx-xx', 'firm1@testmail.com', '1') insert into Firm values ('Firm2', 'xxx-xx-xx', 'firm2@testmail.com', '1') insert into Employee values ('Ivan', 'Ivanov', 'x-xxx-xx','1') insert into Employee values ('Victor', 'Romanov', 'x-xxx-xx','1') insert into Employee values ('Alex', 'Petrov', 'x-xxx-xx','2')
Таким образом мы получили три таблицы. Диаграмма данных созданной базы представлена ниже:
Теперь необходимо решить, каким образом данная реляционная структура может быть перенесена в таблицу. Как вам известно из лекции, таблицу Windows Azure можно соотнести с коллекцией взаимосвязанных сущностей, если проводить аналогии с реляционными базами данных. В то время, как строки таблиц Windows Azure, по сути являются экземплярами конкретных сущностей.
Мы предлагаем следующее очевидное решение:
Создать Windows Azure таблицу "Relational", которая будет содержать в себе сущности Address, Firm и Employee
Ключ секции будет указывать на соответствие строки таблицы Azure экземпляру сущности реляционной БД, т.е. для всех сотрудников ключ секции будет - "Employee"
Значения атрибутов - ключей в реляционных таблицах будут являться значениями RowKey для таблицы "Relational", такими образом пара ключ секции - ключ строки будет являться уникальным идентификатором однозначно указывающим на принадлежность Azure - строки конкретной сущности исходной БД и определяющим экземпляр сущности
Значения остальных атрибутов будут перенесены без изменений.