- •Лабораторная работа 1
- •Лабораторная работа №2 Создание базы данных
- •Работа в среде Microsoft sql server 2008
- •Создание базы данных
- •Создание таблиц, входящих в бд. Задание для их атрибутов типов данных и ограничений целостности, соответствующих смыслу таблиц.
- •Присвоение имен ограничениям
- •Проверка ограничивающих условий с использованием составных полей
- •Values (111,'Петров','Александр', ‘Иванович’, ‘1994-05-05’, 23, 3,5);
- •Values (101, 'Иванов', null, 200, 3, 'Москва','6/10/1979', 15);
- •3. Модификация структуры таблицы (добавление и удаление нового столбца, добавление ограничений, изменение типа данных, ограничений целостности)
- •Лабораторная работа №3 Команды манипулирования данными
- •Values (111, 'Иванов', ‘Александр’);
- •Лабораторная работа №4 Проектирование запросов
- •Лабораторная работа №5 Создание запросов
- •Проектирование представлений, хранимых процедур, триггеров
- •Проектирование представлений
- •Примеры триггеров
- •Лабораторная работа №7 Представления
- •Обновление данных в представлениях
- •Тип, Цена, Цена*0.05 from Товар Модифицирование представлений
- •Операции модификации в представлениях, маскирующих строки и столбцы
- •Агрегированные представления
- •Представления, основанные на нескольких таблицах
- •Лабораторная работа №8 Разработка хранимых процедур Хранимые процедуры
- •Создание, изменение и удаление хранимых процедур
- •Drop procedure {имя_процедуры} [,...N]; Выполнение хранимой процедуры
- •Лабораторная работа №9 Создание триггеров
- •Компоненты триггера
- •Типы триггеров
- •Создание триггеров
- •Преимущества использования триггеров:
- •Программирование триггеров
- •Примеры использования триггеров
- •Insert into Students (fio, Nomer_zachetki, id_Group, Stipendiya) values ('Ильин с.В.', '08вп131', 2, 1250);
- •17.6. Использование хранимых процедур в триггерах
- •Insert into Students (fio, Nomer_zachetki, id_Group, Stipendiya) values ('Макарь в.А.', '06вп118', 4, 1200);
Проверка ограничивающих условий с использованием составных полей
При необходимости можно включить более одного поля в ограничивающее условие.
Предположим, что ограничение на размер стипендии (меньше 200) должно распространяться только на студентов, живущих в Воронеже. Это можно указать в запросе со следующим табличным ограничением CHECK:
CREATE TABLE STUDENT
(STUDENT_ID INTEGER PRIMARY KEY,
SURNAME CHAR(25) NOT NOLL,
NAME CHAR (10) NOT NULL,
STIPEND INTEGER,
KURS INTEGER,
CITY CHAR(15),
BIRTHDAY DATE,
UNIV_ID INTEGER UNIQUE,
CHECK (STIPEND < 200 AND CITY = 'Воронеж'));
или в несколько другой записи:
CREATE TABLE STUDENT
(STUDENT_ID INTEGER PRIMARY KEY,
SURNAME CHAR(25) NOT NULL,
NAME CHAR (10) NOT NULL,
STIPEND INTEGER,
KURS INTEGER,
CITY CHAR (15),
BIRTHDAY DATE,
UNIV_ID INTEGER UNIQUE,
CONSTRAINT STUD_CHECK CHECK (STIPEND < 200 AND CITY = 'Воронеж'));
Установка значений по умолчанию
В SQL имеется возможность при вставке в таблицу строки, не указывая значений некоторого поля, определять значение этого поля по умолчанию. Наиболее часто используемым значением по умолчанию является NULL. Это значение принимается по умолчанию для любого столбца, для которого не было установлено ограничение NOT NULL.
Значение поля по умолчанию указывается в команде CREATE TABLE с помощью ключевого слова
DEFAULT <значение по умолчанию>.
Строго говоря, опция DEFAULT не имеет ограничительного свойства, так как она не ограничивает значения, вводимые в поле, а просто конкретизирует значение поля в случае, если оно не было задано.
Предположим, что основная масса студентов, информация о которых находится в таблице STUDENT, проживает в Воронеже. Чтобы при задании атрибутов не вводить для большинства студентов название города 'Воронеж', можно установить его как значение поля CITY по умолчанию, определив таблицу STUDENT следующим образом:
CREATE TABLE STUDENT
(STUDENT_ID INTEGER PRIMARY KEY,
SURNAME CHAR (25) NOT NULL,
NAME CHAR (10) NOT NULL,
STIPEND INTEGER CHECK (STIPEND < 200),
KURS INTEGER,
CITY CHAR (15) DEFAULT 'Воронеж',
BIRTHDAY DATE,
UNIV_ID INTEGER);
Другая цель практического применения задания значения по умолчанию — это использование его как альтернативы для NULL. Присутствие NULL в качестве возможных значений поля существенно усложняет интерпретацию операций сравнения, в которых участвуют значения таких полей, поскольку NULL представляет собой признак того, что фактическое значение поля неизвестно или неопределенно. Следовательно, строго говоря, сравнение с ним любого конкретного значения в рамках двузначной булевой логики является некорректным, за исключением специальной операции сравнения is NULL, которая определяет, является ли содержимое поля каким-либо значением или оно отсутствует. Действительно, каким образом в рамках двузначной логики ответить на вопрос, истинно или ложно условие CITY = 'Воронеж', если текущее значение поля CITY неизвестно (содержит NULL)?
Во многих случаях использование вместо NULL значения, подставляемого в поле по умолчанию, может существенно упростить использование значений поля в предикатах.
Например, можно установить для столбца опцию NOT NULL, а для неопределенных значений числового типа установить значение по умолчанию «равно нулю», или для полей типа CHAR — пробел, использование которых в операциях сравнения не вызывает никаких проблем.
