
- •Содержание
- •Введение
- •Лабораторная работа №1
- •Лабораторная работа №3 Вставка, удаление и обновление данных
- •Лабораторная работа №4 Создание простых запросов на выборку
- •Лабораторная работа №5 Создание сложных запросов на выборку
- •Лабораторная работа №6 Создание хранимых процедур
- •Лабораторная работа №7 Создание триггеров
- •Лабораторная работа №8 Транзакции
- •Заключение
Министерство образования и науки РФ
ФГБОУ ВПО «Омский государственный технический университет»
Кафедра «Автоматизированные системы обработки информации и управления»
ОТЧЕТ
по лабораторным работам (MSSQLSERVERиORACLE)
по дисциплине «СУБД»
ВАРИАНТ №9
Преподаватель О. Б. Малков
Студент Е.А. Пендер
Омск 2012
Содержание
Введение 3
Лабораторная работа №1 4
Лабораторная работа №2 6
Лабораторная работа №3 13
Лабораторная работа №4 20
Лабораторная работа №5 24
Лабораторная работа №6 28
Лабораторная работа №7 32
Лабораторная работа №8 35
Лабораторная работа №9 37
Заключение 39
Введение
В ходе выполнения лабораторных работ по дисциплине «СУБД» необходимо освоить основные функции, операции и SQL-запросы для работы с такими СУБД какMSSQLиORACLE.
Темой для выполнения последующих лабораторных работ будет: «Курсы по повышению квалификации»:
В учебном заведении организованы курсы повышения квалификации. Группы слушателей формируются в зависимости от специальности и отделения. В каждую из них включено определенное количество слушателей. Проведение занятий обеспечивает штат преподавателей, для каждого из которых в базе данных зарегистрированы стандартные анкетные данные (фамилия, имя, отчество, телефон) и стаж работы. В результате распределения нагрузки получена информация о том, сколько часов занятий проводит каждый преподаватель с соответствующими группами. Хранятся также сведения о виде занятий (лекция, практика), дисциплине и оплате за 1 час. Размер почасовой оплаты зависит от типа занятия. Кроме того каждый преподаватель может вести не все предметы, а только некоторые.
Лабораторная работа №1
Проектирование базы данных с использованием ER-технологии
Для начала определим логическую структуру БД. В результате проектирования должен быть определен состав реляционных таблиц, для каждой таблицы - состав ее атрибутов (столбцов) и логические связи между таблицами. Для каждого атрибута должны быть заданы тип данного, его размер и ограничения целостности.
Логическая модель
Построение ER-диаграммы
Определим основные сущности: Преподаватели, Группы слушателей, Предметы, Вид занятий, а также Учебная нагрузка, которая будет соединяться с другими сущностями неидентифицирующими связями мощностью «один-ко-многим».
Графическое представление (IDEF1X)
Физическая модель
Физическая модель учитывает тип каждого поля, а также другие дополнительные атрибуты.
Поля таблицы Учебная нагрузка должны быть обязательно снабжены атрибутом not null, т. к. при распределении нагрузки вся информация должна быть занесена в таблицу.
Все внешние ключи (FK) созданы с правилом каскадного удаления и обновления. При этом обновление дочерней таблицы вызовет автоматическое обновление родительской таблицы.
Лабораторная работа №2
Создание и связывание таблиц базы данных
MSSQL
С официального сайта было установлено ПО MicrosoftSQLServer2012. После установки необходимых компонентов в графическом режиме была создана база данных с названиемCourses.
Для создания таблиц с полями можно воспользоваться также графическим режимом. После чего может быть сгенерирован скрипт для выполнения этих действий. Это очень удобно, например, чтобы восстановить такие же таблицы необходимо выполнить скрипт:
BEGIN TRANSACTION
SET QUOTED_IDENTIFIER ON
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT
BEGIN TRANSACTION
GO
CREATE TABLE dbo.teachers
(
teacher_code int NOT NULL,
last_name nvarchar(50) NOT NULL,
first_name nvarchar(50) NOT NULL,
middle_name nvarchar(50) NOT NULL,
phone_number nchar(10) NULL,
experience tinyint NULL
) ON [PRIMARY]
GO
ALTER TABLE dbo.teachers ADD CONSTRAINT
PK_teachers PRIMARY KEY CLUSTERED
(
teacher_code
) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
ALTER TABLE dbo.teachers SET (LOCK_ESCALATION = TABLE)
GO
COMMIT
BEGIN TRANSACTION
SET QUOTED_IDENTIFIER ON
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT
BEGIN TRANSACTION
GO
CREATE TABLE dbo.[group]
(
group_code int NOT NULL,
departament nvarchar(50) NOT NULL,
specialty nvarchar(50) NOT NULL,
number_of_students smallint NOT NULL
) ON [PRIMARY]
GO
ALTER TABLE dbo.[group] ADD CONSTRAINT
PK_group PRIMARY KEY CLUSTERED
(
group_code
) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
ALTER TABLE dbo.[group] SET (LOCK_ESCALATION = TABLE)
GO
COMMIT
BEGIN TRANSACTION
SET QUOTED_IDENTIFIER ON
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT
BEGIN TRANSACTION
GO
CREATE TABLE dbo.subject
(
subject_code int NOT NULL,
subject_name nvarchar(50) NOT NULL
) ON [PRIMARY]
GO
ALTER TABLE dbo.subject ADD CONSTRAINT
PK_subject PRIMARY KEY CLUSTERED
(
subject_code
) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
ALTER TABLE dbo.subject SET (LOCK_ESCALATION = TABLE)
GO
COMMIT
BEGIN TRANSACTION
SET QUOTED_IDENTIFIER ON
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT
BEGIN TRANSACTION
GO
CREATE TABLE dbo.form_of_class
(
form_code int NOT NULL,
name_code nvarchar(50) NOT NULL,
pay_per_hour smallint NOT NULL
) ON [PRIMARY]
GO
ALTER TABLE dbo.form_of_class ADD CONSTRAINT
PK_form_of_class PRIMARY KEY CLUSTERED
(
form_code
) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
ALTER TABLE dbo.form_of_class SET (LOCK_ESCALATION = TABLE)
GO
COMMIT
BEGIN TRANSACTION
SET QUOTED_IDENTIFIER ON
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT
BEGIN TRANSACTION
GO
CREATE TABLE dbo.teaching_load
(
load_code int NOT NULL,
hours smallint NOT NULL,
group_code int NOT NULL,
form_code int NOT NULL,
subject_code int NOT NULL,
teacher_code int NOT NULL
) ON [PRIMARY]
GO
ALTER TABLE dbo.teaching_load ADD CONSTRAINT
PK_teaching_load PRIMARY KEY CLUSTERED
(
load_code
) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
ALTER TABLE dbo.teaching_load SET (LOCK_ESCALATION = TABLE)
GO
COMMIT
BEGIN TRANSACTION
SET QUOTED_IDENTIFIER ON
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT
BEGIN TRANSACTION
GO
ALTER TABLE dbo.teachers SET (LOCK_ESCALATION = TABLE)
GO
COMMIT
BEGIN TRANSACTION
GO
ALTER TABLE dbo.subject SET (LOCK_ESCALATION = TABLE)
GO
COMMIT
BEGIN TRANSACTION
GO
ALTER TABLE dbo.[group] SET (LOCK_ESCALATION = TABLE)
GO
COMMIT
BEGIN TRANSACTION
GO
ALTER TABLE dbo.form_of_class SET (LOCK_ESCALATION = TABLE)
GO
COMMIT
BEGIN TRANSACTION
GO
ALTER TABLE dbo.teaching_load ADD CONSTRAINT
FK_teaching_load_form_of_class FOREIGN KEY
(
form_code
) REFERENCES dbo.form_of_class
(
form_code
) ON UPDATE CASCADE
ON DELETE NO ACTION
GO
ALTER TABLE dbo.teaching_load ADD CONSTRAINT
FK_teaching_load_group FOREIGN KEY
(
group_code
) REFERENCES dbo.[group]
(
group_code
) ON UPDATE CASCADE
ON DELETE NO ACTION
GO
ALTER TABLE dbo.teaching_load ADD CONSTRAINT
FK_teaching_load_subject FOREIGN KEY
(
subject_code
) REFERENCES dbo.subject
(
subject_code
) ON UPDATE CASCADE
ON DELETE NO ACTION
GO
ALTER TABLE dbo.teaching_load ADD CONSTRAINT
FK_teaching_load_teachers FOREIGN KEY
(
teacher_code
) REFERENCES dbo.teachers
(
teacher_code
) ON UPDATE CASCADE
ON DELETE NO ACTION
GO
ALTER TABLE dbo.teaching_load SET (LOCK_ESCALATION = TABLE)
GO
COMMIT
Теперь созданы таблицы с первичными ключами и связями между ними в базе данных.
ORACLE
С официального сайта было установлено ПО OracleDatabase11gExpressEditionиSQLDeveloper(удобное средство для разработчика). После установки необходимых компонентов в графическом режиме было создано новое соединение и пользовательAdmin с определенными правами.
Создать таблицы можно, запустив этот скрипт:
CREATE TABLE GROUPS
(
GROUP_CODE NUMBER NOT NULL
, DEPARTAMENT VARCHAR2(20) NOT NULL
, SPECIALTY VARCHAR2(20) NOT NULL
, STUDENTS_NUMBER NUMBER NOT NULL
, CONSTRAINT GROUPS_PK PRIMARY KEY
(
GROUP_CODE
)
ENABLE
);
CREATE TABLE CLASS_FORM
(
FORM_CODE NUMBER NOT NULL
, NAME_CODE VARCHAR2(20) NOT NULL
, PAY_PER_HOUR NUMBER NOT NULL
, CONSTRAINT CLASS_FORM_PK PRIMARY KEY
(
FORM_CODE
)
ENABLE
);
CREATE TABLE SUBJECT
(
SUBJECT_CODE NUMBER NOT NULL
, SUBJECT_NAME VARCHAR2(20) NOT NULL
, CONSTRAINT SUBJECT_PK PRIMARY KEY
(
SUBJECT_CODE
)
ENABLE
);
CREATE TABLE TEACHERS
(
TEACHER_CODE NUMBER NOT NULL
, LAST_NAME VARCHAR2(20) NOT NULL
, FIRST_NAME VARCHAR2(20) NOT NULL
, MIDDLE_NAME VARCHAR2(20) NOT NULL
, PHONE_NUMBER VARCHAR2(20)
, EXPERIENCE NUMBER
, CONSTRAINT TEACHERS_PK PRIMARY KEY
(
TEACHER_CODE
)
ENABLE
);
CREATE TABLE TEACHING_LOAD
(
LOAD_CODE NUMBER NOT NULL
, HOURS NUMBER NOT NULL
, GROUP_CODE NUMBER NOT NULL
, FORM_CODE NUMBER NOT NULL
, SUBJECT_CODE NUMBER NOT NULL
, TEACHER_CODE NUMBER NOT NULL
, CONSTRAINT TEACHING_LOAD_PK PRIMARY KEY
(
LOAD_CODE
)
ENABLE
);
Внешние ключи создаются в «Редактирование таблицы»: