Анимация
JavaScript
|
Главная Библионтека Как уже указывалось, в таблице может быть только один первичный ключ, но с помощью ключевого слова UNIQUE можно подготовить кандидатов на первичный ключ и при необходимости с помощью команды ALTER TABLE переустановить первичный ключ. Для создания ключей-кандидатов используется следующий синтаксис: [CONSTRAINT constraintname] UNIQUE [CLUSTERED NONCLUSTERED] (colname [, colnamel [..., colname16]]) [on segmentname] Например: CREATE TABLE Auto Store.YourReadness.FirstTable (sqlserverstns CONSTRAINT pk SQL PRIMARY KEY CLUSTERED, access users CONSTRAINT uk ac users UNIQUE) Учтите, что вы можете иметь только один индекс типа CLUSTERED, то есть в нашем случае второй индекс обязательно будет NONCLUSTERED. Следующее ограничение служит для построения ссылочной целостности, то есть для сохранения связей между двумя таблицами по выражению, которое мы укажем с помощью ключевого слова FOREIGN KEY. При этом те же поля должны быть указаны после ключевого слова REFERENCES, где также должна быть указана таблица, с которой организуется связь. Дополнительно необходимо, чтобы в родительской таблице обязательно присутствовал первичный или альтернативный ключ по тем же полям. Синтаксис этого ограничения: [CONSTRAINT constraintname] [FOREIGN KEY (colname [, colnamel [..., colname16]])] REFERENCES [owner.]reftable [(refcol [, refcoll [..., refcol16]])] Исходя из вышесказанного, понятно, что в ключ ссылки (FOREIGN KEY) может входить не больше 16 полей. Надо отметить, что ссылки с помощью FOREIGN KEY и REFERENCES мы можем установить только для таблиц, которые находятся в одной базе данных. В следующем примере обратите внимание на изменение в записи ограничения при построения ключа по нескольким полям. Пример построения ссылочной целостности по одному полю: CREATE TABLE autostore.yourreadness.pat table (tree char(20) PRIMARY KEY, leaf char(10)) CREATE TABLE autostore.yourreadness.child table (wood char(20) REFERENCES pat table(tree)) В данном примере нет необходимости указывать ключевое слово FOREIGN KEY, так как связь устанавливается по одному полю. Пример построения ссылочной целостности по нескольким полям: CREATE TABLE autostore.yourreadness.pat table (tree char(20), branch money, leaf char(10), CONSTRAINT tochild PRIMARY KEY (tree,branch) ) CREATE TABLE autostore.yourreadness.child table (tree char(20), branch money, childs varchar(25), FOREIGN KEY (tree,branch) REFERENCES pat table(tree,branch) Следует учитывать, что ключевое слово FOREIGN KEY не создает индекса. Поэтому для лучшей производительности имеет смысл создавать для дочерней таблицы индекс по выражению, которое будет использоваться в ссылке. Ограничение Default устанавливает значение по умолчанию для колонки. Оно имеет следующий синтаксис: [CONSTRAINT constraintname] DEFAULT {constantexpression niladic-function NULL} [FOR colname] Здесь следует отметить, что можно использовать либо выражение в виде константы, либо функцию (встроенную или пользовательскую), которая не требует аргументов. Совершенно очевидно, что для колонки типа Timestamp значение по умолчанию устанавливать нельзя, так же как и для поля IDENTITY (счетчик). Если вы записываете данное ограничение как отдельное выражение, необходимо использовать ключевое слово FOR colname. Рассмотрим пример использования ограничения Constraint. В данном примере создается таблица, колонка accept date которой будет принимать значение текущей даты при добавлении новой записи в таблицу, - безусловно, только в том случае, если не будет указано явное значение. CREATE TABLE autostore.yourreadness.child table (tree char(20), branch money, childs varchar(25), accept date datetime DEFAULT getdate() FOREIGN KEY (tree,branch) REFERENCES pat table(tree,branch) Ограничение Check лимитирует список значений, которые мы можем ввести в колонку. Оно имеет следующий синтаксис: [CONSTRAINT constraintname] CHECK [NOT FOR REPLICATION] (expression) В случае, если вы используете опцию NOT FOR REPLICATION, данное правило проверки уровня поля не будет срабатывать при операции репликации таблицы, в которой оно используется. Рассмотрим пример использования ограничения Check. В следующем примере параметр Check ограничивает ввод в колонке accept date значениями, не превышающими дату следующего за текущим дня. CREATE TABLE autostore.yourreadness.child table (tree char(20), branch money, childs varchar(25), accept date datetime CHECK accept date << getdate()+1 FOREIGN KEY (tree,branch) REFERENCES pat table(tree,branch) Создание представлений Представления служат для вывода информации из одной или нескольких таблиц путем использование запроса. Синтаксис создания представления существенно короче, чем у команды CREATE TABLE. CREATE VIEW [owner.]viewname [(columnname [, columnname]...)] [WITH ENCRYPTION] AS selectstatement [WITH CHECK OPTION] Здесь аргумент owner определяет владельца этой таблицы. Viewname - название представления. Далее, по выбору, можно указать свои собственные названия колонок, перечислив новые наименования в скобках. Если использовать предложение WITH ENCRYPTION, то можно затруднить пользователям возможность узнать, откуда представление получает данные. Предложение WITH CHECK OPTION позволяет в случае модификации записи посредством представления гарантировать, что запись будет доступна через представление, после того как изменения будут записаны на диск. После ключевого слова AS записывается выражение команды SQL-SELECT. Рассмотрим пример создания представления: CREATE VIEW yourreadness.somekindofview AS SELECT tree FROM Сhild table Создание триггеров converted to PDF by HupBaH9I Триггеры создаются командой CREATE TRIGGER, имеющей следующий синтаксис: CREATE TRIGGER [owner.]trigger name ON [owner.]table name FOR {INSERT, UPDATE, DELETE} [WITH ENCRYPTION] AS sql statements Есть возможность использовать альтернативный синтаксис, который выглядит так: CREATE TRIGGER [owner.]trigger name ON [owner.]table name FOR {INSERT, UPDATE} [WITH ENCRYPTION] AS IF UPDATE (column name) [{AND OR} UPDATE (column name)...] sql statements Коротко о триггерах можно сказать как об особого рода хранимых процедурах, которые автоматически срабатывают во время операций модификации, удаления или добавления записей. Триггеры используются, как правило, для создания бизнес-правил и поддержки ссылочной целостности данных. Естественно, что непомерное использование триггеров замедляет работу. Предложение WITH ENCRIPTION, так же как и в случае с представлениями, служит для того, чтобы скрыть от постороннего глаза SQL выражение, которое он запускает. Существуют определенные ограничения на использование триггеров. Нельзя использовать их в представлениях. Рекомендуется не использовать SQL выражения, которые возвращают наборы данных. 8.2. Использование Visual FoxPro для разработки клиентского приложения Итак, в предыдущем параграфе мы освоили необходимый минимальный набор команд, которого достаточно, чтобы начать работать с данными на SQL Server. Настала пора обсудить вопросы построения клиентской части, при этом вспомнив набор из шести операций, которые нам доступны из приложения front-end. В итоге получается, что из клиентской части нам доступны все операции. На всякий случай не забудьте про возможность недостаточного совершенства имеющегося драйвера ODBC. В этом параграфе мы обсудим вопросы создания приложения типа клиент-сервер с помощью Visual FoxPro. Visual FoxPro предоставляет следующие средства для работы с данными, имеющими другой формат: 1. Конструктор соединения (Connection Designer). Альтернативно можно использовать команду CREATE CONNECTION. В этом случае для многих установок надо использовать функцию DBSETPROP(). 2. Конструктор представления (View Designer). Можно использовать команду CREATE SQL VIEW. В этом случае свойства полученного представления необходимо изменять с помощью функции DBSETPROP(). 3. Набор функций SQL pass-through позволяет контролировать работу сервера с помощью диалекта SQL самого сервера. Главным образом используется для получения выборки данных для дальнейшей обработки в клиентской части приложения. В то же время вам становятся доступны практически все команды и возможности сервера. Конструктор соединения используется для создания и модификации соединений, хранимых в базе данных. Активизируется Конструктор соединения, так же как и другие дизайнеры в Visual FoxPro, тремя способами: 1. В меню File выполнить команду New, затем выбрать Connection. 2. Из командного окна с помощью команды CREATE CONNECTION. 3. Из Project Manager, выбрав Connection, New. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 [ 87 ] 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 |