Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Создание и модификация структуры БД




 

Мы рекомендовали бы начать с более простого - изучения достаточно удобных визуальных средств модификации структуры БД. Тем не менее, далеко не все из них имеют средства "обратной" генерации 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 (см. документацию).

 

МОДИФИКАЦИЯ СОДЕРЖИМОГО ТАБЛИЦ

 

Добавление записи.

 

1. Добавление единичной записи.

INSERT INTO имя_таблицы [(список_имен_полей])]

VALUES (список_выражений)

 

 

В случае, когда список имен полей задан, он, очевидно, должен быть согласован по типу со списком выражений, задающим значения соответствующих полей в добавляемой записи; если же список имен полей отсутствует, то, по умолчанию, подразумевается список имен всех полей таблицы. В любом случае, необъявленные значения полей либо берутся равными значению по умолчанию (см. опцию DEFAULT в команде CREATE TABLE), либо - равными NULL.

 

2. Добавление результатов выборки.

INSERT INTO имя_таблицы (команда SELECT)

 

Подразумевается, что результатом команды SELECT является таблица, совпадающая по количеству и типу полей с заданной.

 

           
   
Конечное состояние Таблицы = теоретико-множественное объединение таблиц как отношений
 
Начальное состояние таблицы
   
 
 
Результат выборки
 

 


Редактирование записей

 

UPDATE [Имя_базы_данных!]Имя_таблицы

SET Список выражений вида Имя_поля=Выражение

[WHERE Условие_обновления]

 

обновляет все указанные поля в заданной таблице значениями указанных выражений; при наличии опции WHERE, изменяются только записи, удовлетворяющие заданному условию.

 

Логическое удаление записей

 

DELETE FROM [Имя_базы_данных!]Имя_таблицы

[WHERE Условие_удаления]

 

помечает записи,удовлетворяющие заданному условию, как удаленные.

 

Замечание. Как обычно в СУБД, логическое удаление записей не означает их фактического, т.е. физического удаления - производимого в FoxPro командой упаковки таблицы PACK; до выполнения последней помеченные как удаленные записи могут быть восстановлены командой RECALL. Помеченные, но фактически не удаленные записи могут включаться или не включаться в последующую обработку в зависимости от значения системной SET-переменной DELETED.

 

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...