рдореИрдВ рд╕рднреА рд╣рдмреНрд░рд╛рд╣реНрд░рд╛ рдирд┐рд╡рд╛рд╕рд┐рдпреЛрдВ рдХреЛ рдирдорд╕реНрдХрд╛рд░ рдХрд░рддрд╛ рд╣реВрдБ! рдПрдХ рдЕрдЪреНрдЫрд╛ рдирдпрд╛ рдХрд╛рд░реНрдп рд╕рдкреНрддрд╛рд╣ рд╣реИ! рдЗрд╕рд▓рд┐рдП, рд╣рдо SQL Azure Federations рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛рдмреЗрд╕ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдХреЛ рдпрд╛рдж рд╣реИ,
рдкрд┐рдЫрд▓реА рдмрд╛рд░ рд╣рдордиреЗ рддрдп рдХрд┐рдпрд╛ рдерд╛ рдХрд┐ рдХрд┐рд╕ рдЯреЗрдмрд▓ рдкрд░ рдФрд░ рдХрд┐рд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╣рдо рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рд╢рд╛рд░реНрдХ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдВрдЧреЗред рдЪрд▓реЛ рдЕрдВрдд рдореЗрдВ рдпрд╣ рдХрд░реЛ!
рдкреНрд░рд╡рд╛рд╕
рдЗрд╕рд▓рд┐рдП, рд╣рдо рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдЦрд╛рддреЛрдВ (рддрд╛рд▓рд┐рдХрд╛) рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдбреЗрдЯрд╛ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝реЗ рддрд╛рд░реНрдХрд┐рдХ рд░реВрдк рд╕реЗ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдЕрдВрддрд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдирд┐рд░реНрдорд╛рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ, рдЪрд▓реЛ рдЗрд╕реЗ SQL Azure Federations рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред
рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡рд┐рдВрдбреЛрдЬ рдПрдЬрд╝реНрдпреЛрд░ рдореИрдиреЗрдЬрдореЗрдВрдЯ рдкреЛрд░реНрдЯрд▓ рдпрд╛ SQL рд╕рд░реНрд╡рд░ рдореИрдиреЗрдЬрдореЗрдВрдЯ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЦреЛрд▓реЗрдВред
USE xPenses
GO
IF EXISTS (SELECT name FROM sysobjects where name = N'Operation') DROP TABLE Operation
...
рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реА рдЪреАрдЬрд╝ USE рдСрдкрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ SQL Azure рдХреА рдореВрд▓ рд╕реАрдорд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ - рдПрдХ рдХрдиреЗрдХреНрд╢рдиред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдПрдХ рдорд╣рд╛рд╕рдВрдШ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдЬреЛрдбрд╝реЗрдВ:
-- A database must be selected before executing this statement
CREATE FEDERATION Accounts(AccountId BIGINT RANGE)
GO
USE FEDERATION Accounts(AccountId = 1) WITH RESET, FILTERING = OFF
GO
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, SSMS рдХреЛ SQL Azure Server рд╕реЗ рдЬреЛрдбрд╝рдХрд░, рдЖрдкрдХреЛ рдХреНрд╡реЗрд░реА рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реВрдЪреА рд╕реЗ рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдПрдХ рдирдпрд╛ рдлреЗрдбрд░реЗрд╢рди рдмрдирд╛рдПрдВрдЧреЗ, рдЬрд┐рд╕рдХрд╛ рдбреЗрдЯрд╛ рдЦрд╛рддрд╛ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ (рдЦрд╛рддрд╛ рдЖрдИрдбреА) рдХреЗ рдореВрд▓реНрдп рджреНрд╡рд╛рд░рд╛ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдлрд┐рд▓рд╣рд╛рд▓ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдХреЛрдИ рддрд╛рд▓рд┐рдХрд╛ рдирд╣реАрдВ рдмрдирд╛рдИ рдЧрдИ рд╣реИ, рдЕрд░реНрдерд╛рддреН рдЦрд╛рддрд╛ рддрд╛рд▓рд┐рдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдореЗрдВ рдХрд┐рд╕реА рднреА рдбреЗрдЯрд╛ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рд╕рдВрдмрджреНрдз рдирд╣реАрдВ рд╣реИред рдлрд╝реАрд▓реНрдб рдХрд╛ рдирд╛рдо рдЙрд╕ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдлрд╝реАрд▓реНрдб рдХреЗ рдирд╛рдо рд╕реЗ рднреА рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рддрд░рдг рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдпрд╣рд╛рдВ рд╣рдо
SQL Azure Federations рдХреА рдПрдХ рдФрд░, рддрд╛рд░реНрдХрд┐рдХ,
рд╕реАрдорд╛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдЬрд┐рд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╡рд┐рддрд░рдг рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рд╡рд╣ INT, BIGINT, UNIQUEIDENTIFIER рдФрд░ VARBINARY рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдорд╣рд╛рд╕рдВрдШ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдкрд╣рд▓реЗ рд╢рд╛рд░реНрдХ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдбреЗрдЯрд╛ рджрд░реНрдЬ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдпрд╛рдиреА рдПрдХ рдРрд╕рд╛ рд╢рд╛рд░реНрдХ рдЬреЛ рдкрд╣рд▓реЗ рдЕрдХрд╛рдЙрдВрдЯ (рдЦрд╛рддрд╛ = 1) рдХрд╛ рдбрд╛рдЯрд╛ рд╕реНрдЯреЛрд░ рдХрд░рддрд╛ рд╣реИред
рд╣рдорд╛рд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдиреАрдЪреЗ рджреЗрдЦреЗрдВред рд╣рдореЗрдВ рдЦрд╛рддреЛрдВ рдХреА рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ SQL Azure рдХреЛ рдкрддрд╛ рдЪрд▓реЗ рдХрд┐ Id рдлрд╝реАрд▓реНрдб рджреНрд╡рд╛рд░рд╛ рдЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдбреЗрдЯрд╛ рд╢рд╛рд░реНрдХ рдХреЗ рд╕рд╛рде рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
CREATE TABLE Account (
[Id] INTEGER NOT NULL PRIMARY KEY IDENTITY(1,1),
[EntityId] INTEGER NOT NULL FOREIGN KEY REFERENCES Entity(Id),
[Currency] NVARCHAR(3)
)
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рддрд╛рд▓рд┐рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореЗрдВ рдмрджрд▓ рдЬрд╛рддреА рд╣реИ:
CREATE TABLE Account (
[Id] BIGINT NOT NULL,
[EntityId] INTEGER NOT NULL FOREIGN KEY REFERENCES Entity(Id),
[Currency] NVARCHAR(3),
CONSTRAINT [PK_Account] PRIMARY KEY CLUSTERED
(
[Id] ASC
)
) FEDERATED ON (AccountId= Id)
рддреЛ рдХреНрдпрд╛ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ? ID рдлрд╝реАрд▓реНрдб рдкреНрд░рдХрд╛рд░ BIGINT рдмрди рдЧрдпрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдордиреЗ рдПрдХ рдирдпрд╛ рд░рд┐рдХреЙрд░реНрдб рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддреЗ рд╕рдордп рдЗрд╕ рдлрд╝реАрд▓реНрдб рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдорд╛рди рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЦреЛ рджреАред рдпрд╣ SQL Azure Federations рдХреА рдПрдХ рдФрд░ рд╕реАрдорд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЖрдк рдЕрднреА рднреА DEFAULT рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ рдпрджрд┐ ID рдлрд╝реАрд▓реНрдб рдХрд╛ рдкреНрд░рдХрд╛рд░ UNIQUEIDENTIFIER рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХреНрд╖реЗрддреНрд░ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
[Id] UNIQUEIDENTIFIERNOT NULL DEFAULT NEWID()
рдлрд┐рд░, рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдирдП рд░рд┐рдХреЙрд░реНрдб рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддреЗ рд╕рдордп, рд╣рдореЗрдВ рдмрдирд╛рдП рдЧрдП рд░рд┐рдХреЙрд░реНрдб рдХреА рдЖрдИрдбреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рдЗрд╕ рддрд░реНрдХ рдХреЛ рдЖрд╡реЗрджрди рд╕реНрддрд░ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЕрдЧрд▓реА рдмрд╛рдд рдЬрд┐рд╕ рдкрд░ рдЖрдкрдХреЛ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП рд╡рд╣ рддрд╛рд▓рд┐рдХрд╛ рдХреА рдореБрдЦреНрдп рдХреБрдВрдЬреА рдХреА рдШреЛрд╖рдгрд╛ рд╣реИред рд╣рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдмрдирд╛рдИ рдЬрд╛ рд░рд╣реА рдХреБрдВрдЬреА рдХреЛ рдХреНрд▓рд╕реНрдЯрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЕрдВрддрд┐рдо рдХрд╛рд░реНрдп FEDERATED ON рдХреАрд╡рд░реНрдб рдХреЗ рд╕рд╛рде рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рддрд╛рд▓рд┐рдХрд╛ рдлрд╝реЗрдбрд░реЗрдЯреЗрдб рд╣реЛрдЧреАред рдЗрд╕рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рдЖрдИрдбреА рдлрд╝реАрд▓реНрдб рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЗрд╕рд▓рд┐рдП, рдЦрд╛рддреЛрдВ рдХреА рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рд╛рде, рд╣рдо рд╕рдордЭ рдЧрдПред рд╣рдо рдФрд░ рдЖрдЧреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реНрдХреАрдорд╛ рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЦрд╛рддрд╛ рддрд╛рд▓рд┐рдХрд╛ "рдХреНрд░реЗрдбрд┐рдЯ рдХрд╛рд░реНрдб" рдФрд░ "рдмреИрдВрдХ рдЦрд╛рддрд╛" рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдЬрдирдХ рд╣реИред

рдпрд╣реА рд╣реИ, BankAccount рдФрд░ CreditCard рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдореЗрдВ рдЦрд╛рддрд╛ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рджреЗрд╢реА рдХреБрдВрдЬреА рд╣реИред рдЪреВрдВрдХрд┐ рдЦрд╛рддрд╛ рддрд╛рд▓рд┐рдХрд╛ рдЕрдм рдлрд╝реЗрдбрд░реЗрдЯреЗрдб рд╣реИ, рдЗрд╕рд▓рд┐рдП рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рджреВрд╕рд░реА рддрд╛рд▓рд┐рдХрд╛ рдХреА рдЕрдЦрдВрдбрддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред
рдпрд╣ SQL Azure Federations рдХреА рдПрдХ рдФрд░ рд╕реАрдорд╛ рд╣реИ ред рдлрд╝реЗрдбрд░реЗрдЯреЗрдб рдЯреЗрдмрд▓ рдбреЗрдЯрд╛ рдЯреЗрдмрд▓ рдХреЛ рдЕрдиреНрдп рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛ рдХрд┐ рдЦрд╛рддреЛрдВ рдХреА рддрд╛рд▓рд┐рдХрд╛ (рдЦрд╛рддрд╛) рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рддрд╛рд▓рд┐рдХрд╛рдУрдВ рд╕реЗ рд╕рднреА рд╡рд┐рджреЗрд╢реА рдХреБрдВрдЬреА рдХреЛ рд╣рдЯрд╛ рджреЗрдВред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреНрд░реЗрдбрд┐рдЯ рдХрд╛рд░реНрдб, рдлреЙрд░реНрдо рдХреЗ рдмрдЬрд╛рдп:
CREATE TABLE CreditCard (
[Id] INTEGER NOT NULL PRIMARY KEY IDENTITY(1,1),
[AccountId] INTEGER NOT NULL FOREIGN KEY REFERENCES Account(id),
[Type] NVARCHAR(MAX)
CONSTRAINT CreditCardType CHECK (
[Type] = 'Visa'
OR [Type] = 'MasterCard'
OR [Type] = 'JCB'
OR [Type] = 'AmericanExpress'),
[Number] NVARCHAR(MAX)
)
рдлрд╛рд░реНрдо рд▓реЗрдВрдЧреЗ:
CREATE TABLE CreditCard (
[Id] INTEGER NOT NULL PRIMARY KEY IDENTITY(1,1),
[AccountId] BIGINT NOT NULL,
[Type] NVARCHAR(MAX)
CONSTRAINT CreditCardType CHECK (
[Type] = 'Visa'
OR [Type] = 'MasterCard'
OR [Type] = 'JCB'
OR [Type] = 'AmericanExpress'),
[Number] NVARCHAR(MAX)
)
рдпрд╣реА рд╣реИ, рдХреНрд░реЗрдбрд┐рдЯ рдХрд╛рд░реНрдб рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рд▓реЗрдЦрд╛ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд░рд┐рдХреЙрд░реНрдб рдореЗрдВ рд▓рд┐рдВрдХ рдХреА рдЕрдЦрдВрдбрддрд╛ рдЖрд╡реЗрджрди рддрд░реНрдХ рдХреЗ рдХрдВрдзреЛрдВ рдкрд░ рдЯрд┐рдХреА рд╣реБрдИ рд╣реИред
рдпрджрд┐ рдЖрдк рдЗрд╕ рд╕реНрддрд░ рдкрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдирд┐рд░реНрдорд╛рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рднреА рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐, рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рджреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рднреА рд╣реЛрддреА рд╣реИрдВред рдЙрдирдореЗрдВ рд╕реЗ рдкрд╣рд▓рд╛ - рдПрдХ рдирдИ рд╢реНрд░реЗрдгреА рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рддрд░реНрдХ рдПрдХ рд╢рд╛рд░реНрдХ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рдирд╣реАрдВ рдЬрд╛рддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рдПрдХ рдирдпрд╛ рдЦрд╛рддрд╛ (AddAccount) рдЬреЛрдбрд╝рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдорд╛рдореВрд▓реА рдмрджрд▓рд╛рд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рддреЛ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХреЛрдб рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
CREATE PROCEDURE AddAccount(
@Name NVARCHAR(MAX),
@Description NVARCHAR(MAX),
@Currency NVARCHAR(3),
@Instrument NVARCHAR(MAX),
@Type NVARCHAR(MAX),
@Number NVARCHAR(MAX)
)
AS
INSERT INTO Entity VALUES (@Name, @Description)
DECLARE @EntityId INTEGER = (SELECT Id FROM Entity WHERE Name = @Name AND Description = @Description)
INSERT INTO Account VALUES (@EntityId, @Currency)
IF (@Instrument = 'BankAccount')
BEGIN
INSERT INTO BankAccount VALUES (
(SELECT Id FROM Account WHERE Account.EntityId = @EntityId),
@Type,
@Number
) END
IF (@Instrument = 'CreditCard')
BEGIN
INSERT INTO CreditCard VALUES (
(SELECT Id FROM Account WHERE Account.EntityId = @EntityId),
@Type,
@Number
) END
GO
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЬрд┐рди рдмрджрд▓рд╛рд╡реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╡реЗ рдХрд╛рдлреА рд╣рдж рддрдХ рд╕реНрдкрд╖реНрдЯ рд╣реИрдВред рдЪреВрдВрдХрд┐ рд╣рдордиреЗ рдХрд┐рд╕реА рдЦрд╛рддреЗ рдХреЗ рд▓рд┐рдП рдЖрдИрдбреА рдлрд╝реАрд▓реНрдб рдорд╛рди рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЦреЛ рджреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рддрд░реНрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдЬрд┐рдХ рдХреЗ рд╕рд╛рде рдЯрд┐рдХреА рд╣реБрдИ рд╣реИред рдпрд╣реА рд╣реИ, рд╣рдореЗрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реЗрдбрд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
CREATE PROCEDURE AddAccount(
@AccountId BIGINT,
@Name NVARCHAR(MAX),
@Description NVARCHAR(MAX),
@Currency NVARCHAR(3),
@Instrument NVARCHAR(MAX),
@Type NVARCHAR(MAX),
@Number NVARCHAR(MAX)
)
AS
INSERT INTO Entity VALUES (@Name, @Description)
DECLARE @EntityId INTEGER = (SELECT Id FROM Entity WHERE Name = @Name AND Description = @Description)
INSERT INTO Account VALUES (@AccountId, @EntityId, @Currency)
...
GO
рддрджрдиреБрд╕рд╛рд░, рдХреЛрдб рдХреЗ рдмрдЬрд╛рдп рд▓реЗрдЦрд╛ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд░рд┐рдХреЙрд░реНрдб рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдирд╛:
EXEC AddAccount 'Cash', 'Everyday cash account', 'USD', NULL, NULL, NULL
рдЕрдм рдпрд╣ рдПрдХ рдФрд░ рдкреИрд░рд╛рдореАрдЯрд░ (рдЦрд╛рддрд╛ рдмрдирд╛рдП рдЬрд╛рдиреЗ рдХреА рдЖрдИрдбреА) рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдЧрд╛:
EXEC AddAccount 1, 'Cash', 'Everyday cash account', 'USD', NULL, NULL, NULL
рд╕рдВрднрд╡рддрдГ рдЕрдЧрд▓рд╛ рддрд╛рд░реНрдХрд┐рдХ рдкреНрд░рд╢реНрди рд╣реЛрдЧрд╛: рдХреНрдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд рдорд╣рд╛рд╕рдВрдШ (USE FEDERATION) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдб рдЬреЛрдбрд╝рдирд╛ рд╕рдВрднрд╡ рд╣реИ? рдЪреВрдВрдХрд┐, рдпрджрд┐ рд╣рдо рдЙрд╕ рдЦрд╛рддреЗ рдХреА рдЖрдИрдбреА рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рд╣рдо рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╣рдореЗрдВ рдХрд┐рд╕ рдлреЗрдбрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╣рдо рддреБрд░рдВрдд рдЖрд╡рд╢реНрдпрдХ рд╢рд╛рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ:
USE FEDERATION Accounts(AccountId = @AcccountId) WITH RESET, FILTERING = OFF
GO
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдпрджрд┐ рдЖрдк рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ SSMS рдЖрдкрдХреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рджреЗрдЧрд╛ред рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ AddAccount рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╢рд╛рд░реНрдХ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ USE FEDERATION рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ USE FEDERATION рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдорддреМрд░ рдкрд░ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред рдорд╣рд╛рд╕рдВрдШреЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб "рдПрдХ рд╕реНрддрд░ рдКрдкрд░" рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдбреЗрдЯрд╛рдмреЗрд╕ рдирд┐рд░реНрдорд╛рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкрд░рд┐рд╡рд░реНрддрди рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдП рд╣реИрдВред рд╣рдо рдЗрд╕реЗ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдПрдХ рд░реВрдЯ рдбреЗрдЯрд╛рдмреЗрд╕ (рдлреЗрдбрд░реЗрд╢рди рд░реВрдЯ) рдФрд░ рдПрдХ рд╢рд╛рд░реНрдХ (рдлреЗрдбрд░реЗрд╢рди рд╕рджрд╕реНрдп) рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдЯреБрдХрдбрд╝реЗ рдореЗрдВ рд╡рд┐рднрд╛рдЬрди
рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдпрд╣ рд╕рдм рдХрд░рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рдирд╛ рд╣реИред рдпрд╛рдиреА рдПрдХ рдЦрд╛рддреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдбреЗрдЯрд╛ рдХреЛ рджреВрд╕рд░реЗ рдЦрд╛рддреЗ рдХреЗ рдбреЗрдЯрд╛ рд╕реЗ рдЕрд▓рдЧ рдХрд░рдирд╛ред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдЕрд▓рдЧ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдПрдВ:
-- Scaling out the federation
USE FEDERATION ROOT WITH RESET
GO
ALTER FEDERATION Accounts SPLIT AT (AccountId = 2)
GO
рдкрд╣рд▓реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬреЛ рдпрд╣ рдХрд░рддреА рд╣реИ рд╡рд╣ рдлреЗрдбрд░реЗрд╢рди рд░реВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рд┐рдЪ рд╣реИ, рдЕрд░реНрдерд╛рдд, рдпрд╣ xPenses рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рднреАрддрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдлреЗрдбрд░реЗрд╢рди рдЬрд╛рдирдХрд╛рд░реА (рдореЗрдЯрд╛рдбреЗрдЯрд╛) рд╡рд╣рд╛рдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреА рд╣реИред
рдлрд┐рд░ рд╣рдо рд╕рдВрдХреЗрдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдЦрд╛рддрд╛ рдирд╛рдо рдХреЗ рд╕рд╛рде рдорд╣рд╛рд╕рдВрдШ рдХреЛ рддреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЦрд╛рддрд╛ 2 рдлрд╝реАрд▓реНрдб рдХреЗ рдореВрд▓реНрдп рдХреЗ рдмрд░рд╛рдмрд░ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рдпрд╛рдиреА, рдкрд╣рд▓реЗ рдЦрд╛рддреЗ рдХрд╛ рдбреЗрдЯрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрдирд╛рдП рдЧрдП рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рд░рд╣рддрд╛ рд╣реИ, рдФрд░ рдЕрдиреНрдп рдЦрд╛рддреЛрдВ рдХрд╛ рдбреЗрдЯрд╛ рдЕрдЧрд▓реЗ рд╢рд╛рд░реНрдХ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреГрдкрдпрд╛ рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдо рдХрд╣реАрдВ рднреА рдпрд╣ рд╕рдВрдХреЗрдд рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рдбреЗрдЯрд╛ рдЦрд╛рддреЛрдВ рдХреА рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдЯреВрдЯ рдЧрдпрд╛ рд╣реИред рд╣рдо рдХреЗрд╡рд▓ xPenses рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ!

рдЗрд╕рд▓рд┐рдП, рд╣рдо рдЗрд╕ рдХрдорд╛рдВрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ ... рдпрд╣ рдХрд╛рдлреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЬрдм рдЖрдк рдСрдмреНрдЬреЗрдХреНрдЯ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рд╡рд┐рдВрдбреЛ рдХреЛ рд░рд┐рдлреНрд░реЗрд╢ рдХрд░реЗрдВрдЧреЗ рддреЛ рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗ:

рдПрдХ рдирдП рд╢рд╛рд░реНрдХ рдХреЗ рдмрдЬрд╛рдп, рд╣рдореЗрдВ рдорд┐рд▓рд╛ ... 3 рдХреЗ рд░реВрдк рдореЗрдВ рдХрдИ! рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕рдореЗрдВ рдХреБрдЫ рднреА рдЕрд╕рд╛рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реИред рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдкрд╣рд▓реЗ рд╢рд╛рд░реНрдж рдХреЗ рднреАрддрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдбреЗрдЯрд╛ рдХреЛ AccountId рдХреЗ рдорд╛рди рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, 1 рдХреА рдЖрдИрдбреА рдХреЗ рд╕рд╛рде рдПрдХ рдЦрд╛рддреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рд╢рд╛рд░реНрдж рдкрд░ рдХреЙрдкреА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ 2 рд╕реЗ рджреВрд╕рд░реЗ рдХреА рдЖрдИрдбреА рд╣реИред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдЗрд╕рдореЗрдВ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИред SQL Azure рдбреЗрдЯрд╛ рдХреЛ рд╢рд╛рд░реНрдХ рдореЗрдВ рдкреБрдирдГ рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдлреЗрдбрд░реЗрд╢рди рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдФрд░ рджреЛ рд╢рд╛рд░реНрдХ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рд╣реИрдВред

рдЕрдм, рдЕрдЧрд░ рд╣рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ 3 рд╢рд╛рд░реНрдХ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЦрд╛рддрд╛ рдбреЗрдЯрд╛ рдХреЛ 3 рдХреА рдЖрдИрдбреА рдХреЗ рд╕рд╛рде рдПрдХ рдЕрд▓рдЧ рд╢рд╛рд░реНрдХ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ, рддреЛ рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдирд┐рдореНрди рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛:
ALTER FEDERATION Accounts SPLIT AT (AccountId = 3)
GO
рдирд┐рд╖реНрдХрд░реНрд╖
рд╣рдордиреЗ SQL Azure Federations рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдбреЗрдЯрд╛рдмреЗрд╕ рдирд┐рд░реНрдорд╛рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдЬрд╛рдВрдЪ рдХреАред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рдмрд╕реЗ рддреЗрдЬ рдХреЛрдиреЗ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдбреЗрдЯрд╛рдмреЗрд╕ рд▓реЙрдЬрд┐рдХ рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рд╣рд┐рд╕реНрд╕рд╛ "рдЙрдЪреНрдЪ" рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдо рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реНрддрд░ рдкрд░ рд░реБрдХ рдЧрдПред рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ, рдпрд╣ рдЕрддреНрдпрдзрд┐рдХ рдЕрдиреБрд╢рдВрд╕рд╛ рдХреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рдЖрдк SQL Azure Federations рдХреЗ рд▓рд┐рдП рдорд╛рдЗрдЧреНрд░реЗрд╢рди рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЕрдкрдиреЗ рдбреЛрдореЗрди рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХрд╛ рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВред