В представленных далее разделах приводится основополагающая Информация о Преобразовании (масштабировании) Базы Данных Visual FoxPro в Базу Данных SQL Server:

Масштабирование Объектов (преобразование, отображение)

Базы Данных Visual FoxPro могут быть непосредственно преобразованы (отображены), или Масштабированы в соответствующие Базы Данных SQL Server. При выполнении данного процесса преобразования с использование Мастера Масштабирования SQL Server Upsizing, создаются аналогичные Объекты Сервера SQL, которые имеют требуемую функциональность начальных Объектов Локальных Баз Данных Visual FoxPro. 

Преобразование Объектов Базы Данных Visual FoxPro в соответствующие Объекты Сервера SQL достаточно ясная и прозрачная процедура. Объекты Visual FoxPro: Таблицы, их Поля, Индексы, Правила Контроля, Стандартные значения масштабируются "один-к-одному" в базовые объекты Сервера SQL. Выбранные Таблицы VFP - преобразуются в Таблицы SQL, за исключением самого Словаря Данных, контейнера .DBC

Однако, не все локальные объекты напрямую масштабируются в объекты сервера SQL. Правила Контроля и Мехзанизмы обеспечение ссылочной целостности данных в системе Visual FoxPro являются составными частями Контейнера .DBC, их функциональность реализуется на уровне самой системы VFP. Указанные Объекты SQL Server не являются составными частями Словаря Данных (Контейнера) и их функциональность обеспечивается на уровне программного кода самих Таблиц. Указанные принципиальные отличия и существующие проектные решения рассматриваемого Мастера Масштабирования SQL Server Upsizing не позволяют напрямую преобразовать абсолютно все Объекты Контейнера базы данных Visual FoxPro - в соответствующие конструкции SQL Server.

В следующем Списке представлены Объекты и правила их Масштабирования Visual FoxPro -->> SQL Server.

Объекты Visual FoxPro Соответствующие Объекты SQL Server

Database

Database

Table

Table

Indexes

Indexes

Field

Field

Default

Default

Правила проверки объекта Table

Хранимые процедуры SQL Server, вызываемые из соответствующих Триггеров UPDATE, INSERT

Правила проверки Объекта Field

Хранимые процедуры SQL Server, вызываемые из соответствующих Триггеров UPDATE, INSERT

Постоянные Отношени (Persistent relationships) (Когда используется Требование Ссылочной Целостности Данных (Referential Integrity Constraints))

Соответствующие Триггеры Update, Insert, Delete, или ограничения для Таблиц

Соглашения по Наименованию масштабируемых Объектов

В условиях Миграции объектов Данных на удаленный Источник (Сервер), мастер SQL Server Upsizing создает уникальные имена указанных объектов на сервере. Для создания новых имен объектов Мастер использует Префиксы (приставки), например, для новых объектов типа Defaults или Rules, которые не существуют в локальных Базах Данных Visual FoxPro. Сначала указывается Имя Таблицы, далее следует Имя Поля, согласно правилу Префикса. Подобное соглашение по наименованию всех Объектов в удаленной Базе Данных позволяет применять стандартные средства сортировки и администрирования системных компонент Сервера. Создаваемые объекты группируются в той же последовательности, как они размещались в Контейнере локальной БД.

NoteОбратите Внимание

Если в процессе Масштабирования нарушается описанное выше Правило (соглашение) Именования объектов SQL Server, то имена Базы данных, таблиц, индексов, и соответствующих Полей таблиц могут быть изменены. Имя объекта в SQL Server может иметь не более 30 символов, первым символом имени объекта может быть либо алфавитный символ (не цифра), или символ "@". Остальными символами Имени объекта могут быть: числа, символы, или специальные знаки "$", "#", "_"; пробел Недопустим. Мастер SQL Server Upsizing заменяет все недопустимые символы одним символом подчеркивания "_". Если встречается имя, совпадающее с зарезервированным Словом SQL Server, то к данному имени добавляется Суффикс "_". Например, FROM / GROUP - преобразуются в FROM_ / GROUP_. Если Имя объекта начинается с Цифры, то мастер масштабирования помещает перед ним приставку в виде "_".

Мастер масштабирования SQL Server Upsizing создает удаленные Таблицы с соответствующими Именами, если имена локальных таблиц не содержат пробелов или зарезервированных слов удаленного источника (Сервера).

Для Имен Полей таблиц действуют аналогичные ограничения; мастер масштабирования выполняет преобразования типов данных каждого Поля в соответствующие Типы Данных SQL Server.

В следующей Таблице показаны соответствия Типов Данных Visual FoxPro и типов данных SQL Server.

Обозначение Тип данных Visual FoxPro Соответствующий Тип Данных SQL Server

C

Character

char

Y

Currency

money

D

Date

datetime

T

DateTime

datetime

B

Double

float

F

Float

float

G

General

image

I

Integer

int

L

Logical

bit

M

Memo

text

M (Binary)

Memo (Binary)

image

C (Binary)

Character (Binary)

binary

N

Numeric

float

Столбец "штамп времени" (TimeStamp) создается на основании соответствующего типы данных Transact-SQL - TimeStamp. Когда вы устанавливаете режим масштабирования локальных таблиц: Timestamp, на 4-ом этапе работы Мастера масштабирования, то для каждой экспортируемой таблицы создается дополнительный столбец (Поле) с именем timestamp, одноименного типа данных.

Примечание Переводчика: данный столбец используется в режимах Обновления данных, выполнения команд SQL UPDATE. Смотрите дополнительно описание секции WhereType для функции CursorGetProp(),  значение параметра (4): DB_KEYANDTIMESTAMP (из FOXPRO.H).

Если локальная Таблица содержит одно или несколько полей типа memo (M) или picture (P), тогда Мастер Масштабирования SQL Server Upsizing автоматически устанавливает рассматриваемый режим  преобразования Timestamp, и соответствующий столбец добавляется к указанным таблицам. Для Таблиц, содержащих описанные типы Полей, описанный выше режим Обновления данных является наболее предпочтительным.

Уникальный, идентификационный столбец в удаленных Таблицах создается при использовании типа данных: Transact-SQL IDENTITY.

Масштабирование Представлений (Views)

Если вы выбираете режим масштабирования Create Remote Views On Tables (Создание удаленных Представлений для Таблиц), то мастер масштабирования SQL Server Upsizing создает соответствующие Удаленные Представления, которые обладают многими свойствами локальных Таблиц.

Масштабирование SQL Server Defaults (стандартных значений, по-умолчанию)

Выражения "по-умолчанию" для полей локальных Таблиц Visual FoxPro напрямую масштабируются в соответствующие объекты SQL Server Default. Мастер масштабирования SQL Server Upsizing пытается создать для каждого поля соответствующее Правило формирования начального значения Поля таблицы, объект SQL Server Default. Если указанный Объект создается, то Мастер выполняет привязку его к соответствующему Полю SQL Server. В соответствующем Отчете о ходе процесса масштабирования выполняется запись об описанной выше процедуре создания требуемого Объекта SQL Server Transact-SQL. Смотрите дополнительно подраздел: Отображение Выражений.

В основном, для систем SQL Server и Visual FoxPro, правила Default являются аналогичными; однако, существуют некоторые различия по реализации Значений по-умолчанию для Полей Таблиц. В системе SQL Server Default - являются внутренними, встроенными Объектами, которые не зависят от конкретной Таблицы, или Поля. Как только указанный объект Default - создан, он сразу может быть использован в других полях, или связанных объектах.

Однако, Логические поля Visual FoxPro могут иметь значения = null, система SQL Server не допускает такой вольности. Для разрешения описанного противоречия, мастер масштабирования SQL Server Upsizing автоматически создает для таких случаев Объект Default, называемый "UW ZeroDefault", данное правило работает для всех указанных Полей. В этом случае, если логическое поле не содержит значения, то есть = NULL, подразумевается False (.F.) в Visual FoxPro, то в масштабируемом Поле устанавливается значение = 0.

Если для рассмотренного выше случая Логического Поля Visual FoxPro, его значение = True (.T.), мастер масштабирования SQL Server Upsizing не выполняет привязку Правила UW_ZeroDefault для рассматриваемой Таблицы. Вместо этого, мастер создает объект Default, который устанавливает значение для Поля удаленной Таблицы, = 1; правила наименования этого объекта описаны в следующем Пункте.

NoteОбратите Внимание

Поведение объектов SQL Server Defaults отличается от выполнение внутренних правил "по-умолчанию" в Visual FoxPro.

Соглашения по Наименованию Объектов Defaults

Мастер масштабирования SQL Server Upsizing для Именования объектов Defaults использует префикс "Dflt_", далее следует Имя Таблицы и Имя Поля. Например,  объект Default для поля "Сумма Ордера" (OrderAmmaunt), в таблице Customer будет назван на удаленном Сервере как "Dflt_Customer_Ordamt".

NoteОбратите Внимание

Если комбинация префикса, имен таблицы и поля будет превышать 30 символов (вместе с разделителями), система Visual FoxPro удаляет незначащие символы (до 30 символов).

Поля таблицы, для которых не задано Значение "по-умолчанию", после масштабирования связываются с правилом Default "UW ZeroDefault". Если два или более Поля таблицы имеют одинаковые правила формирования значений по-умолчанию, мастер масштабирования SQL Server Upsizing создает два независимых Defaults, с разными Именами, хотя функционально они одинаковы.

Преобразование Индексов

Индексы в системах SQL Server и Visual FoxPro - очень похожи. В следующем Списке представлены правила Преобразования для Индексов.

Тип Индекса (Ключа) Visual FoxPro Тип Индекса (Ключа) SQL Server

Primary

Clustered Unique

Candidate

Unique

Unique

Regular

Non-unique

Мастер масштабирования SQL Server Upsizing для создания имен Индексов Сервера использует имена соответствующих Тэгов Visual FoxPro. Если имя Тэга содержит зарезервированное Слово Сервера, то по правилу формирования Имен, добавляется суффикс  "_".

NoteПримечание

SQL Server не поддерживает свойства Индексов Ascending / Descending, а также Вычисляемых выражений в индексах. Мастер SQL Server Upsizing исключает указанные свойства индексов Visual FoxPro, или некоторые Тэги из процесса масштабирования; допустимыми являются только канонические имена Полей Таблицы.

Масштабирование Триггеров (Triggers)

Триггер SQL Server представляет собой последовательность операторов Transact-SQL, относящихся к конкретной Талице Сервера. Когда вы выбираете, на Этапе 8, Режим масштабирования Правил Контроля или Ссылочной целостности, мастер SQL Server Upsizing конвертирует имеющиеся в локальной Базе Данных Правила уровня Поля и уровня Записи, а также Постоянные Отношения между Таблицами в создаваемые Хранимые Процедуры, которые вызываются из описываемых Триггеров SQL Server. Каждый из описываемых Триггеров функционально соответствует требуемым Правилам Контроля данных и поддержки Ссылочной Целостности Таблиц Сервера.

NoteОбратите внимание

Мастер масштабирования SQL Server Upsizing не выполняет Экспортирование локальных Триггеров Visual FoxPro.

Каждая таблица Сервера может иметь Три Триггера, по одному для каждой базовой операции SQL:  UPDATE, INSERT, DELETE. Данные триггеры выполняются автоматически при выполнении соответствующей команды SQL.

Далее, в Таблице, описываются создаваемые Мастером Масштабирования Триггеры SQL Server, которые реалюзуют соответствующий функционал объектов Visual FoxPro.

Триггер (Trigger) Соответствующая эмуляция в Visual FoxPro

UPDATE

Правила Контроля (проверка на уровне Поля или Записи)

ссылочной Целостности (Referential integrity)

INSERT

Правила Контроля (проверка на уровне Поля или Записи)

Referential integrity (только триггеров дочерней Таблицы)

DELETE (только для родительской Таблицы)

Контроль Ссылочной Целостости (Referential integrity)

Соглашения по наименованию Триггеров

Мастер масштабирование SQL Server Upsizing использует следующее Правило Именования Триггеров: сначала формируется соответствующий Префикс, а далее следует имя Таблицы Сервера, к которой относится этот триггер. Например: "TrigU_"  - для  UPDATE, "TrigD_"  - для DELETE , "TrigI_"  - для INSERT. Например, триггер Обновления UPDATE для Таблицы Customer будет иметь Имя:  TrigU_Customer.

Экспортирование Правил Контроля

Мастер SQL Server Upsizing может экспортировать Правила Контроля Visual FoxPro уровня Поля и уровня Записи, которые преобразуются в соответствующие хранимые процедуры (ХП=SP=stored procedure) сервера SQL. Мастер создает указанные процедуры со следующими именами: приставка (префикс) "VRF"+_(имя таблицы)+_(имя поля). Например, vrf_customer_lname. Агналогично, правило урованя Записи (таблицы): приставка (префикс) "VRT"+_(имя таблицы). Например, vrt_customer.

Мастер масштабирования SQL Server Upsizing использует Триггеры, которые вызывают соответствующие хранимые процедуры, взамен соответствующих Правил сервера SQL. Это объясняется невозможностью обрабатывать пользовательские Ошибки в указанных Правилах Сервера. Дополнительную информацию об использовании Правил Сервера SQL смотрите в технической документации, описание команды CREATE RULE.

Экспортирование Сылочной Целостности

Ваши Приложения Visual FoxPro поддерживают Ссылочную Целостность (далее = RI, Referential Integrity), основанную на базовых Триггерах SQL:  UPDATE, DELETE, INSERT, проверяющих  наличие постоянной связи между таблицами на уровне SQL-движка . Вы можете выбрать идин из двух вариантов реализации Требований RI (Сылочной Целостности) на уровне Сервера SQL Server:

  • Аналогичная RI, основанная на Триггерах SQL (назавем ее TRI = Trigger-based RI).

  • Декларативная RI (Declarative Referential Integrity = DRI).

Когда вы используете вариант TRI,  мастер SQL Server Upsizing создает требуемые Триггеры, содержащие команды Transact-SQL, реализующие ограничения RI Visual FoxPro. Если вы выбираете второй вариант реализации DRI,  мастер SQL Server Upsizing создает соответствующие Ограничения SQL Server при помощи внесения изменений в структуры соответствующих Таблиц при использовании команды ALTER TABLE, при этом используется ключевая секция CONSTRAINT.

Сылочная Целостность, основанная на Триггерах (TRI)

В случае использования метода TRI, создаются требуемые Триггеры SQL Server, включающие соответствующие операторы Transact-SQL. Вы можете использовать данные Триггеры для соблюдения ограничений RI при выполнении соответствующих команд UPDATE, DELETE, INSERT, или при выполнении последовательных (каскадных = cascade) изменений таблиц при помощи операторов DELETE, INSERT.

Мастер SQL Server Upsizing создает Триггеры SQL Server, реализующие частные (локальные) триггеры Visual FoxPro, используемые обычно для обеспечения постоянных Отношений между Таблицами в Базах Данных Visual FoxPro.

Реализация Постоянных Отношений Visual FoxPro основана на ограничениях ссылочной целостности (RI) с помощью 4 (четырех) базовых Триггеров удаленного источника Данных сервера SQL Server: два триггера для Родительской Таблицы, и два триггера - для дочерней таблицы.

NoteОбратите Внимание

Если только одна из двух Таблиц (из постоянного отношения) будет Масштабирована, или будет нарушено Правило Ссылочной Целостности (RI) в Visual FoxPro, тогда рассматриваемое Отношение не будет Экспортировано.

В следующем далее Списке приводятся варианты отображения Ссылочной Целостности Visual FoxPro в создаваемые Триггеры SQL Server с помощью Мастера SQL Server Upsizing.

Обеспечение Ссылочной Целостности Visual FoxPro Триггеры SQL Server Краткое Описание

UPDATE

Cascade (последовательный)

Каскадный Триггер UPDATE.

UPDATE

Restrict (ограниченный)

Ограниченный Триггер UPDATE.

UPDATE

Ignore (игнорируется)

Триггер не создается.

INSERT

Restrict

Ограниченный Триггер INSERT.

INSERT

Ignore

Триггер не создается.

DELETE

Cascade

Каскадный Триггер DELETE.

DELETE

Restrict

Ограниченный Триггер DELETE.

DELETE

Ignore

Триггер не создается.

Родительская Таблица (Parent Table)

Мастер SQL Server Upsizing создает соответствующий триггер UPDATE, который ограничивает (запрещает) изменение первичного ключа родительской таблицы или каскадного обновления дочерней таблицы, для различных типов Отношений (связей Таблиц), созданных в Базе Данных Visual FoxPro.

Мастер SQL Server Upsizing аналогично создает триггер DELETE, запрещающий удаление Записей в связанной дочерней таблице, что существенно зависит от типа Отношения между таблицами, созданное в Visual FoxPro.

Дочерняя Таблица (Child Table)

Мастер SQL Server Upsizing создает триггер UPDATE, который запрещает изменение индексов типа Foreign, которые обеспечивают ссылочную целостность для дочерних Записей. Аналогично, триггер INSERT создается для дочерней Таблицы, который запрещает добавление Записей в данную таблицу, без добавления Родительских Записей (другими словами: запрещается создание Сиротливых записей).

Значения пользовательских Ошибок (Custom Error Values)

При выполнении операций Мастером Масштабирования, в том случае, когда нарушаются Правила выполнения Триггеров, созданных этим мастером, могут возникать Исключительные ситуации (Ошибки), система SQL Server размещает указанные Ошибки в переменные @@ERROR . Обработка возможных Ошибок определяется мастером SQL Server Upsizing как часть программного Кода созданных Триггеров. Указанные Ошибки могут быть использованы в дальнейшем, для определения тех ситуаций, когда пользователь пытается выполнить операции SQL: Update, Insert, Delete.

В следующей таблице приводится Список номеров Ошибок, возникающих для соответствующих операций SQL.

Вывполняемая Операция N ошибки SQL Server

Violated validation rule (Нарушение Правил Контроля)

44444

Attempted delete (Попытка Удаления)

44445

Attempted update (Попытка Обновления)

44446

Attempted insert (Попытка Вставки)

44447

При попытке выполнения операторов Update / Delete для нескольких Записей; оператор отменяется (Rolled Back)

44448

Декларативная Ссылочная Целостность (DRI)

Если вы намерены использовать вариант Декларативной Ссылочной Целостности (DRI), то Мастер SQL Server Upsizing создает соответствующие языковые Конструкции SQL Server: команды ALTER TABLE, в которых используется секция CONSTRAINT. Для Родительской Таблицы используется конструкция, определяющая первичный ключ (индекс) PRIMARY KEY. Для Дочерней таблицы создается конструкция на основе секций FOREIGN KEY и REFERENCES. Декларативная Ссылочная Целостность поддерживается для уровней RESTRICT, RESTRICT Update, RESTRICT Delete.

В этом случае, вы можете использовать соответствующие Ограничения SQL Server, обеспечивающие необходимый уровень выполнения операций UPDATE, DELETE, INSERT, что обеспечивает Декларативную Ссылочную Целостность Данных (уровень Отношений между родительскими и дочерними Таблицами).

Отображение Выражений

Не смотря на то, что система Visual FoxPro имеет в своем распоряжении множество аналогичных функций Transact-SQL, некоторые функциональные выражения не поддерживаются в SQL Server.

В следующей Таблице представлен список системных Функций, аналогичных для систем Visual FoxPro и SQL server.

CEILING( )

LOG( )

LOWER( )

LTRIM( )

RIGHT( )

RTRIM( )

SOUNDEX( )

SPACE( )

STR( )

STUFF( )

UPPER( )

 

В следующей далее Таблице описываются варианты преобразований, выполняемых Мастером SQL Server Upsizing, для Правил Контроля данных уровня Записей таблиц Visual FoxPro и Стандартных значений (default) в соответствующие конструкции Transact-SQL.

Выражение Visual FoxPro Выражение SQL Server

True (.T.)

1

False (.F.)

0

#

<>

.AND.

AND

.NOT.

NOT

.NULL.

NULL

.OR.

OR

=<

<=

=>

>=

ASC( )

ASCII( )

AT( )

CHARINDEX( )

CDOW( )

DATENAME(dw, ...)

CHR( )

CHAR( )

CMONTH( )

DATENAME(mm, ...)

CTOD( )

CONVERT(datetime, ...)

CTOT( )

CONVERT(datetime, ...)

DATE( )

GETDATE( )

DATETIME( )

GETDATE( )

DAY( )

DATEPART(dd, ...)

DOW( )

DATEPART(dw, ...)

DTOC( )

CONVERT(varchar, ...)

DTOR( )

RADIANS( )

DTOT( )

CONVERT(datetime, ...)

HOUR( )

DATEPART(hh, ...)

LIKE( )

PATINDEX( )

MINUTE( )

DATEPART(mi, ...)

MONTH( )

DATEPART(mm, ...)

MTON( )

CONVERT(money, ...)

NTOM( )

CONVERT(float, ...)

RTOD( )

DEGREES( )

SUBSTR( )

SUBSTRING( )

TTOC( )

CONVERT(char, ...)

TTOC( )

CONVERT(datetime, ...)

YEAR( )

DATEPART(yy, ...)

См. также