КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
СОЗДАНИЕ И МОДИФИКАЦИЯ СТРУКТУРЫ БД
Мы рекомендовали бы начать с более простого - изучения достаточно удобных визуальных средств модификации структуры БД. Тем не менее, далеко не все из них имеют средства "обратной" генерации SQL-кода, в то время как иметь "архивное" определение БД в символьном виде часто и удобно, и необходимо в целях безопасности.
Для опытных программистов заметим, что описание структуры БД Visual FoxPro содержит в файле с расширением .dbc, являющимся на деле .dbf-таблицей (что расширяет и без того достаточно богатые возможности программного определения и модификации структуры БД).
СОЗДАНИЕ ТАБЛИЦЫ
CREATE TABLE Имя_создаваемой_таблицы [NAME* Длинное - до 128 символов - имя_таблицы] [FREE*] [(ОПИСАНИЕ ПОЛЯ 1 [ПРАВИЛА КОРРЕКТНОСТИ ПОЛЯ 1)], [(ОПИСАНИЕ ПОЛЯ 2] [ПРАВИЛА КОРРЕКТНОСТИ ПОЛЯ 2])], ….. [(ОПИСАНИЕ ПОЛЯ n] [ПРАВИЛА КОРРЕКТНОСТИ ПОЛЯ n])], [ПРАВИЛА КОРРЕКТНОСТИ ЗАПИСИ]
(опция FREE - свободная таблица - используется в том случае, если программист не хочет включать создаваемую таблицу ни в одну из существующих БД; в противном случае, по умолчанию, таблица будет включена в БД, открытую на момент исполнения команды CREATE TABLE)
где
ОПИСАНИЕ ПОЛЯ - Имя_поля Тип_поля [(Ширина_поля [,Точность (число знаков после запятой - для числовых типов])]
далее перечисляются допустимые в FoxPro скалярные типы, с указанием имени типа и допустимости для соответствующего типа, опций указания ширины поля (Ш) и точности (Т).
Тип Ш Т Комментарий C n - Character - cимвольная строка некоторой длины n D - - Date - Дата T - - dateTime - Дата-время N n d Numeric - вешественное длины n , d знаков после запятой F n d Floating numeric - вещественное длины n, d знаков после запятой, в форме с плавающей точкой I - - Integer - целое B - d douBle - целое двойной точности Y - - currencY - денежная сумма L - - Logical - логический M - - Memo - строка неопределенной длины G - - General - ссылка на внешний объект
à Скалярные типы данных могут различаться как по синтаксису, так и по семантике в различных версиях SQL.
ПРАВИЛА КОРРЕКТНОСТИ ПОЛЯ - одна или несколько опций вида
[NULL | NOT NULL] - значением поля может (не может) быть неопределенное значение NULL; по умолчанию, значение опции определяется значением системной (SET-)переменной NULL; также по умолчанию, значение NULL не допустимо для первичных ключей и уникальных (UNIQUE) полей;
[CHECK Условие корректности поля [ERROR* Текст сообщения о нарушении условия]] - проверяется при каждой модификации, а также при добавлении "пустой" записи; сообщение об ошибке появляется лишь при работе в интерактивном режиме
[DEFAULT Значение поля по умолчанию]
[PRIMARY KEY | UNIQUE] - значение поля является (единственным) первичным ключом записи | должно быть уникальным для каждой записи таблицы; для поддержки соответствующего правила создается индекс с именем, совпадающим с именем поля:
[REFERENCES Имя_родительской_таблицы [TAG Имя (тег) индекса]] - значение поля является внешним ключом указанной родительской таблицы [по данному индексу]
ПРАВИЛА КОРРЕКТНОСТИ ЗАПИСИ - список из одной или несколько опций вида
[PRIMARY KEY Выражение TAG* Имя (тег) индекса |, UNIQUE Выражение TAG* Имя индекса] - указанное выражение определяет (единственный составной) первичный ключ записи | обязано быть уникальным для каждой записи; для поддержки соответствующего правила создается индекс с указанным именем (тегом);
[, FOREIGN KEY Выражение TAG* Имя_индекса REFERENCES Имя_родительской таблицы [TAG* Имя индекса родительской таблицы]] - указанное выражение определяет (составной) внешний ключ записи, поддерживаемым родительским индексом с указанным тегом
[, CHECK Условие корректности записи [ERROR* Текст сообщения о нарушении условия]]) - проверяется при каждой модификации, а также при добавлении "пустой" записи; сообщение об ошибке появляется лишь при работе в интерактивном режиме
УДАЛЕНИЕ ТАБЛИЦЫ
DROP TABLE Имя_таблицы | Имя_файла | ? [RECYCLE] удаляет таблицу из текущей БД; опция ? выдает диалоговое окно выбора таблицы; подопция RECYCLE указывает на то, что удаленную таблицу нужно поместить в "корзину" ОС Windows c возможностью последующего восстановления, в противном случае восстановление невозможно.
УДАЛЕНИЕ ПРЕДСТАВЛЕНИЯ
DROP VIEW имя_представления
МОДИФИКАЦИЯ СТРУКТУРЫ ТАБЛИЦЫ
ALTER TABLE Имя_таблицы ADD | ALTER [COLUMN] Имя_поля Тип_поля [(Ширина_поля [, Точность])] [NULL | NOT NULL] [CHECK Правило_корректности_поля [ERROR Текст_сообщения_о_нарушении_правила]] [DEFAULT Значение_по_умолчанию] [PRIMARY KEY | UNIQUE] [REFERENCES Имя_родительской_таблицы [TAG Тег(имя)_индекса]]
или
ALTER TABLE Имя_таблицы ALTER [COLUMN] Имя_поля [NULL | NOT NULL] [SET DEFAULT Значение_по_умолчанию] [SET CHECK Правило_корректности_поля [ERROR Текст_сообщения_о_нарушении_правила]] [DROP DEFAULT] [DROP CHECK] или
ALTER TABLE Имя_таблицы [DROP [COLUMN] Имя_поля] [SET CHECK Правило_корректности_поля [ERROR Текст_сообщения_о_нарушении_правила]] [DROP CHECK] [ADD PRIMARY KEY Выражение_первичного_ключа TAG Тег(имя)_индекса_первичного_ключа] [DROP PRIMARY KEY] [ADD UNIQUE Выражение [TAG Тег_индекса]] [DROP UNIQUE TAG Тег_индекса] [ADD FOREIGN KEY [Выражение_внешнего_ключа] TAG Тег_индекса REFERENCES Имя_родительской_таблицы [TAG Тег_родительского_индекса]] [DROP FOREIGN KEY TAG Тег_индекса] [RENAME COLUMN Старое_имя_поля TO Новое_имя_поля]
Несмотря на устрашающий синтаксис, семантика команды ALTER TABLE легко выводится из пояснений к команде CREATE TABLE и значений английских слов ALTER - изменить, ADD - добавить, DROP - удалить, SET - положить равным, RENAME - переименовать.
Замечание. Пожалуй, единственным существенным упущением текущей версии FoxPro по сравнению с другими реализациями и стандартом SQL является отсутствие команды создания пользовательского индекса Create Index (и, соответственно команды удаления индекса Drop Index). Правда, это упущение – чисто синтаксическое, поскольку имеется достаточно мощная команда-аналог самого FoxPro – а именно, команда Index (см. документацию).
|