· 8 years ago · Jun 15, 2018, 09:16 PM
1-- Ð›Ð°Ð±Ð¾Ñ€Ð°Ñ‚Ð¾Ñ€Ð½Ð°Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð° â„–3, диÑциплина "Базы данных", СПбГУÐП, веÑна-лето 2018
2
3-- Включение форÑÐ¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ð¹ ÑÑылочной целоÑтноÑти
4PRAGMA foreign_keys = ON;
5
6-- ОчиÑтка Ñхемы данных
7
8DROP TABLE IF EXISTS ДиÑциплина_у_ÑпециальноÑти;
9DROP TABLE IF EXISTS ЗанÑтие_у_группы;
10DROP TABLE IF EXISTS ЗанÑтие;
11DROP TABLE IF EXISTS Группа;
12DROP TABLE IF EXISTS Преподаватель;
13DROP TABLE IF EXISTS Предмет;
14DROP TABLE IF EXISTS ÐудиториÑ;
15DROP TABLE IF EXISTS Кафедра;
16DROP TABLE IF EXISTS СпециальноÑть;
17
18-- Создание Ñхемы данных
19
20CREATE TABLE ÐÑƒÐ´Ð¸Ñ‚Ð¾Ñ€Ð¸Ñ (
21Ðомер_аудитории VARCHAR(8) PRIMARY KEY
22);
23
24CREATE TABLE Предмет (
25Ðазвание TEXT PRIMARY KEY
26);
27
28CREATE TABLE Кафедра (
29Ðазвание TEXT,
30Ðомер INT PRIMARY KEY
31);
32
33CREATE TABLE Преподаватель (
34Ðомер_паÑпорта VARCHAR(11)PRIMARY KEY,
35Ðомер_кафедры INT REFERENCES Кафедра(Ðомер),
36ФИО TEXT ,
37ДолжноÑть TEXT
38);
39
40CREATE TABLE СпециальноÑть (
41Ðазвание TEXT,
42Ðомер_ÑпециальноÑти VARCHAR(10) PRIMARY KEY
43);
44
45CREATE TABLE ДиÑциплина_у_ÑпециальноÑти (
46Объем_лабораторных_занÑтий INT,
47Объем_практичеÑких_занÑтий INT,
48Объем_лекционных_занÑтий INT CHECK (Объем_лекционных_занÑтий<60),
49КурÑовой_проект VARCHAR(4),
50Ðомер_ÑемеÑтра INT,
51Ðомер_ÑпециальноÑти VARCHAR(10) REFERENCES СпециальноÑть(Ðомер_ÑпециальноÑти),
52Ðазвание_предмета TEXT,
53PRIMARY KEY (Ðомер_ÑпециальноÑти,Ðазвание_предмета),
54FOREIGN KEY(Ðазвание_предмета) REFERENCES Предмет(Ðазвание)
55);
56
57CREATE TABLE Группа (
58Ðомер_группы VARCHAR(5),
59Ðомер_ÑпециальноÑти VARCHAR(10) REFERENCES СпециальноÑть(Ðомер_ÑпециальноÑти) ,
60Ðомер_ÑемеÑтра INT,
61PRIMARY KEY (Ðомер_группы)
62
63);
64CREATE TABLE ЗанÑтие (
65Тип TEXT,
66Ðомер_занÑÑ‚Ð¸Ñ INTEGER CHECK (([День_недели]="Понедельник" And [Ðомер_занÑтиÑ]<=8) Or ([День_недели]="Вторник" And [Ðомер_занÑтиÑ]<=8) Or ([День_недели]="Среда" And [Ðомер_занÑтиÑ]<=8) Or ([День_недели]="Четверг" And [Ðомер_занÑтиÑ]<=8) Or ([День_недели]="ПÑтница" And [Ðомер_занÑтиÑ]<=8) Or ([День_недели]="Суббота" And [Ðомер_занÑтиÑ]<=6)),
67День_недели TEXT ,
68Ðомер_аудитории VARCHAR(8) REFERENCES ÐудиториÑ(Ðомер_аудитории),
69Ðомер_паÑпорта_Ð¿Ñ€ÐµÐ¿Ð¾Ð´Ð°Ð²Ð°Ñ‚ÐµÐ»Ñ VARCHAR(11) REFERENCES Преподаватель(Ðомер_паÑпорта),
70Предмет TEXT references Предмет(Ðазвание),
71PRIMARY KEY (Ðомер_занÑтиÑ, День_недели, Ðомер_аудитории)
72);
73
74CREATE TABLE ЗанÑтие_у_группы (
75Ðомер_группы VARCHAR(5),
76Ðомер_занÑÑ‚Ð¸Ñ INTEGER,
77День_недели TEXT,
78Ðомер_аудитории VARCHAR(8),
79PRIMARY KEY (Ðомер_группы, Ðомер_занÑтиÑ, День_недели, Ðомер_аудитории),
80UNIQUE (Ðомер_группы,Ðомер_занÑтиÑ,День_недели),
81FOREIGN KEY(Ðомер_занÑтиÑ, День_недели, Ðомер_аудитории) REFERENCES ЗанÑтие (Ðомер_занÑтиÑ, День_недели, Ðомер_аудитории),
82FOREIGN KEY(Ðомер_группы) REFERENCES Группа(Ðомер_группы)
83);
84
85-- Заполнение данными
86
87INSERT INTO ÐÑƒÐ´Ð¸Ñ‚Ð¾Ñ€Ð¸Ñ VALUES ('32-02'), ('32-04'),('24-03'),('12-03'), ('12-15'),('13-15'), ('52-08'), ('32-09');
88INSERT INTO Кафедра VALUES ('Кафедра вычиÑлительных ÑиÑтем и Ñетей',44), ('Кафедра проблемно-ориентированных вычиÑлительных комплекÑов',41), ('Кафедра компьютерных технологий и программной инженерии',43);
89DROP VIEW IF EXISTS View1;
90DROP VIEW IF EXISTS View2;
91DROP VIEW IF EXISTS View3;
92-- ваш код здеÑÑŒ!
93
94-- Создание предÑтавлений
95-- 1) Группы ÑпециальноÑти "ÐŸÑ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð½Ð°Ñ Ð¸Ð½Ð¶ÐµÐ½ÐµÑ€Ð¸Ñ", у которых не назначено каких-то пар из тех, которые должны быть в Ñтом ÑемеÑтре.
96--CREATE VIEW View1 AS
97--Select Предмет from Select Ðазвание_предмета from ДиÑциплина_у_ÑпециальноÑти where Ðомер_ÑпециальноÑти=(Select Ðомер_ÑпециальноÑти from СпециальноÑть where Ðазвание='ÐŸÑ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð½Ð°Ñ Ð¸Ð½Ð¶ÐµÐ½ÐµÑ€Ð¸Ñ') Group by Ðомер_ÑемеÑтра,Ðазвание_предмета;
98
99
100INSERT INTO Предмет VALUES ('Ð¢ÐµÐ¾Ñ€Ð¸Ñ Ð°Ð»Ð³Ð¾Ñ€Ð¸Ñ‚Ð¼Ð¾Ð²'), ('Ð¢ÐµÑ…Ð½Ð¾Ð»Ð¾Ð³Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ'), ('Моделирование'),('МикропроцеÑÑорные ÑиÑтемы'),('Ð˜Ð½Ñ‚ÐµÑ€Ð°ÐºÑ‚Ð¸Ð²Ð½Ð°Ñ ÐºÐ¾Ð¼Ð¿ÑŒÑŽÑ‚ÐµÑ€Ð½Ð°Ñ Ð³Ñ€Ð°Ñ„Ð¸ÐºÐ°'), ('СиÑтемное программное обеÑпечение'),('Операционные ÑиÑтемы'), ('Схемотехника'), ('Базы данных'), ('Корпоративные Ñети Ñо Ñлужбой каталога');
101INSERT INTO Преподаватель VALUES ('2345 435432', 44, 'Петров Игорь Юрьевич', 'Старший преподаватель'), ('5756 214324', 43, 'Пинцкер ВаÑилий Ðнатольевич', 'ПрофеÑÑор'), ('7654 315543', 44, 'Ðрхипов Евгений ÐлекÑеевич', 'ПрофеÑÑор'), ('8765 254674', 41, 'БелÑков Дмитрий Ðндреевич', 'ÐÑÑиÑтент');
102INSERT INTO ЗанÑтие VALUES --('Практика', 3, 'Четверг', '24-03','5756 214324','Операционные ÑиÑтемы'),
103('ЛекциÑ', 4, 'Четверг', '24-03','8765 254674','Операционные ÑиÑтемы'),
104 ('Практика', 3, 'Вторник', '24-03','5756 214324','Моделирование'),
105 ('ЛекциÑ', 3, 'Понедельник', '32-02','2345 435432', 'Корпоративные Ñети Ñо Ñлужбой каталога'),
106 ('Практика', 2, 'Вторник', '24-03','5756 214324','Моделирование'),
107 ('Практика', 4, 'ПÑтница', '12-03','5756 214324','Ð¢ÐµÑ…Ð½Ð¾Ð»Ð¾Ð³Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ'),
108 ('Ð›Ð°Ð±Ð¾Ñ€Ð°Ñ‚Ð¾Ñ€Ð½Ð°Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð°', 4, 'ПÑтница', '12-15','7654 315543','Операционные ÑиÑтемы'),
109 ('Ð›Ð°Ð±Ð¾Ñ€Ð°Ñ‚Ð¾Ñ€Ð½Ð°Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð°', 5, 'Суббота', '13-15','7654 315543','Моделирование'),
110 ('Практика', 3, 'Четверг', '12-03','7654 315543','Базы данных'),
111 ('ЛекциÑ', 4, 'Четверг', '52-08','8765 254674','Операционные ÑиÑтемы'),
112 ('Практика', 4, 'Среда', '32-02','7654 315543','МикропроцеÑÑорные ÑиÑтемы'),
113 ('Практика', 6, 'Вторник', '32-09','7654 315543','Схемотехника'),
114 ('ЛекциÑ', 5, 'Вторник', '32-09','7654 315543','Ð¢ÐµÑ…Ð½Ð¾Ð»Ð¾Ð³Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ');
115INSERT INTO СпециальноÑть VALUES ('Информатика и вычиÑÐ»Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ñ‚ÐµÑ…Ð½Ð¸ÐºÐ°','09.03.01'), ('ÐŸÑ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð½Ð°Ñ Ð¸Ð½Ð¶ÐµÐ½ÐµÑ€Ð¸Ñ','09.03.04'), ('ÐŸÑ€Ð¸ÐºÐ»Ð°Ð´Ð½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ð¸ÐºÐ°','09.03.03'),('Ðлектроника и наноÑлектроника','11.03.04'),('МатематичеÑкое обеÑпечение','02.03.03'), ('ÐŸÑ€Ð¸ÐºÐ»Ð°Ð´Ð½Ð°Ñ Ð¼Ð°Ñ‚ÐµÐ¼Ð°Ñ‚Ð¸ÐºÐ° и информатика','01.03.02');
116INSERT INTO Группа VALUES ('4732', '09.03.04', 2),('4542', '09.03.01', 6), ('4541','09.03.01', 6), ('4731','09.03.04', 2), ('4512', '09.03.03', 6),('4431', '11.03.04', 8),('4543','09.03.01', 6),('4735', '01.03.02', 2),('4735М', '02.03.03', 2),('4531', '11.03.04', 6),('4515', '09.03.03', 6);
117INSERT INTO ЗанÑтие_у_группы VALUES --('4731', 3, 'Четверг', '24-03'),
118('4732', 4, 'Четверг', '24-03'),
119('4732', 3, 'Вторник', '24-03'),('4542', 3, 'Понедельник', '32-02'), ('4541', 3, 'Понедельник', '32-02'),('4731', 2, 'Вторник', '24-03'), ('4512', 4, 'ПÑтница', '12-03'),('4735', 4, 'ПÑтница', '12-15'),('4431', 5, 'Суббота', '13-15'),('4543', 3, 'Четверг', '12-03'),('4735', 4, 'Четверг', '52-08'),('4735М', 4, 'Среда', '32-02'),('4531', 6, 'Вторник', '32-09'),('4515', 5, 'Вторник', '32-09');
120
121
122CREATE VIEW View1 AS
123SELECT DISTINCT X.Ðомер_аудитории,COUNT( DISTINCT X.Ðомер_занÑтиÑ)*100/COUNT( DISTINCT Y.Ðомер_занÑтиÑ)--*100/COUNT( DISTINCT Y.Ðомер_занÑтиÑ)
124FROM ЗанÑтие X, ЗанÑтие Y
125where X.Ðомер_паÑпорта_Ð¿Ñ€ÐµÐ¿Ð¾Ð´Ð°Ð²Ð°Ñ‚ÐµÐ»Ñ in (Select Ðомер_паÑпорта From Преподаватель where Ðомер_кафедры='44') AND X.Тип='ЛекциÑ' AND Y.Ðомер_паÑпорта_Ð¿Ñ€ÐµÐ¿Ð¾Ð´Ð°Ð²Ð°Ñ‚ÐµÐ»Ñ IN (Select Ðомер_паÑпорта From Преподаватель where Ðомер_кафедры='44')AND Y.Ðомер_аудитории = X.Ðомер_аудитории
126group by Y.Ðомер_аудитории,X.Ðомер_аудитории;
127
128
129
130
131CREATE VIEW View2 AS
132Select Ðомер_группы from
133Группа where Ðомер_группы not in( SELECT Ðомер_группы FROM
134ЗанÑтие_у_группы natural join ЗанÑтие where
135Предмет<>(Select Ðазвание_предмета from
136ДиÑциплина_у_ÑпециальноÑти where
137Ðомер_ÑпециальноÑти=(Select Ðомер_ÑпециальноÑти from
138СпециальноÑть where Ðазвание='ÐŸÑ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð½Ð°Ñ Ð¸Ð½Ð¶ÐµÐ½ÐµÑ€Ð¸Ñ') Group by Ðомер_ÑемеÑтра,Ðазвание_предмета))
139and Ðомер_ÑпециальноÑти=(Select Ðомер_ÑпециальноÑти from
140СпециальноÑть where Ðазвание='ÐŸÑ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð½Ð°Ñ Ð¸Ð½Ð¶ÐµÐ½ÐµÑ€Ð¸Ñ');
141CREATE VIEW View3 AS
142select distinct Ðазвание from (
143select Кафедра.Ðазвание, П.Ðомер_паÑпорта, Ðазвание_предмета from Кафедра
144join Преподаватель П on Кафедра.Ðомер = П.Ðомер_кафедры
145join ЗанÑтие З on П.Ðомер_паÑпорта = З.Ðомер_паÑпорта_преподавателÑ
146join ЗанÑтие_у_группы З2 on З.Ðомер_занÑÑ‚Ð¸Ñ = З2.Ðомер_занÑÑ‚Ð¸Ñ and З.День_недели = З2.День_недели and З.Ðомер_аудитории = З2.Ðомер_аудитории
147join Группа Г on З2.Ðомер_группы = Г.Ðомер_группы
148join СпециальноÑть С on Г.Ðомер_ÑпециальноÑти = С.Ðомер_ÑпециальноÑти
149join ДиÑциплина_у_ÑпециальноÑти Ñ2 on С.Ðомер_ÑпециальноÑти = Ñ2.Ðомер_ÑпециальноÑти
150group by Кафедра.Ðазвание, П.Ðомер_паÑпорта, Ðазвание_предмета
151having count(distinct С.Ðомер_ÑпециальноÑти) > 1) as t group by Ðомер_паÑпорта having count(Ðазвание_предмета) = 1;
152INSERT INTO ДиÑциплина_у_ÑпециальноÑти VALUES (33, 53, 58, 'нет',6,'09.03.01','Корпоративные Ñети Ñо Ñлужбой каталога'), (25, 23, 27, 'нет',2,'01.03.02','Операционные ÑиÑтемы'), (43, 22, 31, 'нет',6,'09.03.01','Ð˜Ð½Ñ‚ÐµÑ€Ð°ÐºÑ‚Ð¸Ð²Ð½Ð°Ñ ÐºÐ¾Ð¼Ð¿ÑŒÑŽÑ‚ÐµÑ€Ð½Ð°Ñ Ð³Ñ€Ð°Ñ„Ð¸ÐºÐ°'),(15, 44, 24, 'нет',8,'11.03.04','Моделирование'),(0, 50, 0, 'еÑть',2,'02.03.03','СиÑтемное программное обеÑпечение'),(23, 25, 14, 'нет',4,'01.03.02','Ð¢ÐµÑ…Ð½Ð¾Ð»Ð¾Ð³Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ'),(37, 73, 15, 'нет',6,'09.03.01','Базы данных'),(47, 34, 32, 'еÑть',2,'11.03.04','Схемотехника'),(15, 24, 42, 'нет',2,'09.03.04','Операционные ÑиÑтемы'),(33, 43, 21, 'нет',6,'09.03.03','Ð¢ÐµÑ…Ð½Ð¾Ð»Ð¾Ð³Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ'),(25, 56, 42, 'нет',2,'09.03.04','Моделирование'),(25, 56, 42, 'нет',2,'02.03.03','МикропроцеÑÑорные ÑиÑтемы');