Хранилище данных с реляционной структурой
Как мы уже говорили в лекциях, хранилище 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 - строки конкретной сущности исходной БД и определяющим экземпляр сущности
Значения остальных атрибутов будут перенесены без изменений.
