Методическое пособие 241
.pdf«bigint» и «name» типа «nvarchar(50)». Поле «id» сделать автоинкрементным с начальным значением 1 и шагом 1 и определить его как первичный ключ с именем «PK_faculty». Полю «id» запретить значения «NULL», полю «name» разрешить значения «NULL»:
CREATE TABLE faculty (id bigint IDENTITY(1,1) NOT NULL CONSTRAINT PK_faculty PRIMARY KEY, name nvarchar(50) NULL);
Рис. 2. Физическая модель. ER-диаграмма
29
4.2. Создать таблицу «chair» с полями «id», «id_faculty» типа «bigint» и «name», «phone» типа
«nvarchar» размером 50 и 15 соответственно. Поле «id» сделать автоинкрементным с начальным значением 1 и шагом 1 и определить его как первичный ключ с именем «PK_ chair». Полю «id» запретить значения «NULL», полям «name» и «phone» разрешить значения «NULL». Для поля «id_faculty» задать ограничение вторичного ключа с именем «FK_chair_faculty» и ссылкой на первичный ключ «id» таблицы «faculty» – задать связь между главной таблицей «faculty» и подчиненной «chair» по первичному и вторичному ключу соответственно:
CREATE TABLE chair (id bigint IDENTITY(1,1) NOT NULL CONSTRAINT PK_chair PRIMARY KEY, id_faculty bigint NULL CONSTRAINT FK_chair_faculty FOREIGN KEY REFERENCES faculty (id), name nvarchar(50) NULL, phone nvarchar(15) NULL);
Рис. 3. Окно текстового редактора для работы с SQL-запросами
30
4.3. Создать таблицу «post» с полями «id» типа
«bigint», «name» типа «nvarchar(50)» и «pay» типа «money».
Поле «id» сделать автоинкрементным с начальным значением 1 и шагом 1 и определить его как первичный ключ с именем «PK_ post». Полю «id» запретить значения «NULL», полям «name» и «pay» разрешить значения «NULL». Для поля «name» задать ограничение уникальности, для поля «pay» задать ограничение проверки – значение этого поля должно быть в диапазоне от 0 до
50000:
CREATE TABLE post (id bigint IDENTITY(1,1) NOT NULL CONSTRAINT PK_post PRIMARY KEY, name nvarchar(50) NULL CONSTRAINT unq_name UNIQUE, pay money NULL CONCTRAINT ck_pay CHECK(pay>=0 AND pay<=50000));
4.4. Создать таблицу «teacher» с полями «id»,
«id_chair», «id_post» типа «bigint» и «lastname», «firstname», «secondname» типа «nvarchar». Поле «id»
сделать автоинкрементным с начальным значением 1 и шагом 1 и определить его как первичный ключ с именем «PK_ teacher». Полю «id» запретить значения «NULL»,
полям «id_chair», «id_post», «lastname», «firstname», «secondname» разрешить значения «NULL». Для поля «id_chair» задать ограничение вторичного ключа с именем «FK_teacher_chair» и ссылкой на первичный ключ «id» таблицы «chair» – задать связь между главной таблицей «chair» и подчиненной «teacher» по первичному и вторичному ключу соответственно. Для поля «id_ post» задать ограничение вторичного ключа с именем «FK_teacher_ post» и ссылкой на первичный ключ «id» таблицы «post» – задать связь между главной таблицей «post» и подчиненной «teacher» по первичному и вторичному ключу соответственно:
31
CREATE TABLE teacher (id bigint IDENTITY(1,1) NOT NULL CONSTRAINT PK_teacher PRIMARY KEY, id_chair bigint NULL CONSTRAINT FK_teacher_chair FOREIGN KEY REFERENCES chair (id), id_post bigint NULL CONSTRAINT FK_teacher_post FOREIGN KEY REFERENCES post (id), lastname nvarchar(25) NULL, firstname nvarchar(25) NULL, secondname nvarchar(25) NULL);
4.5. Создать таблицу «speciality» с полями «id», «id_faculty» типа «bigint» и «name», «code» типа
«nvarchar». Поле «id» сделать автоинкрементным с начальным значением 1 и шагом 1 и определить его как первичный ключ с именем «PK_ teacher». Полю «id» запретить значения «NULL», полям «id_faculty», «name», «code»
разрешить значения «NULL». Для поля «id_faculty» добавить ограничение вторичного ключа с именем «FK_speciality_faculty» и ссылкой на первичный ключ «id» таблицы «faculty» – задать связь между главной таблицей «faculty» и подчиненной «speciality» по первичному и вторичному ключу соответственно:
CREATE TABLE speciality (id bigint IDENTITY(1,1) NOT NULL CONSTRAINT PK_speciality PRIMARY KEY, id_faculty bigint NULL CONSTRAINT FK_speciality_faculty FOREIGN KEY REFERENCES faculty (id), name nvarchar(50) NULL, code nvarchar(8) NULL);
4.6. Создать таблицу «studgroup» с полями «id», «id_speciality» типа «bigint» и «name» типа «nvarchar».
Поле «id» сделать автоинкрементным с начальным значением 1 и шагом 1 и определить его как первичный ключ с именем «PK_ teacher». Полю «id» запретить значения
«NULL», полям «id_speciality», «name» разрешить значе-
32
ния «NULL». Для поля «id_speciality» добавить ограничение вторичного ключа с именем «FK_studgroup_speciality» и ссылкой на первичный ключ «id» таблицы «speciality» – задать связь между главной таблицей «speciality» и подчиненной «studgroup» по первичному и вторичному ключу соответственно:
CREATE TABLE studgroup (id bigint IDENTITY(1,1) NOT NULL CONSTRAINT [PK_studgroup] PRIMARY KEY, id_speciality bigint NULL CONSTRAINT FK_studgroup_speciality FOREIGN KEY REFERENCES speciality (id), name nvarchar(50) NULL);
4.7. Создать таблицу «student» с полями «id», «id_group» типа «bigint», «lastname», «firstname», «secondname», «numstudcard» типа «nvarchar», «admissionyear» типа «int» и «birthdate» типа
«datetime2(7)». Поле «id» сделать автоинкрементным с начальным значением 1 и шагом 1 и определить его как первичный ключ с именем «PK_ teacher». Полю «id» запретить значения «NULL», полям «lastname», «firstname», «secondname», «numstudcard», «admissionyear», «birthdate» разрешить значения «NULL». Для поля «id_group» добавить ограничение вторичного ключа с именем «FK_student_studgroup» и ссылкой на первичный ключ «id» таблицы «studgroup» – задать связь между главной таблицей «studgroup» и подчиненной «student» по первичному и вторичному ключу соответственно:
CREATE TABLE student (id bigint IDENTITY(1,1) NOT NULL CONSTRAINT PK_student PRIMARY KEY, id_group bigint NULL CONSTRAINT FK_student_studgroup FOREIGN KEY REFERENCES studgroup (id), lastname nvarchar(25) NULL, firstname nvarchar(25) NULL, secondname nvarchar(25) NULL,
33
numstudcard nvarchar(16) NULL, admissionyear int NULL, birthdate datetime2(7) NULL);
4.8. Создать таблицу «discipline» с полями «id»
типа «bigint», «name» и «shortname» типа «nvarchar(50)».
Поле «id» сделать автоинкрементным с начальным значением 1 и шагом 1 и определить его как первичный ключ с именем «PK_faculty». Полю «id» запретить значения «NULL», полям «name», «shortname» разрешить значения «NULL»:
CREATE TABLE discipline (id bigint IDENTITY(1,1) NOT NULL CONSTRAINT PK_discipline PRIMARY KEY, name nvarchar(50) NULL, shortname nvarchar(10) NULL);
4.9. Создать таблицу «learnplan» с полями «id»,
«id_discipline», «id_teacher», «id_group» типа «bigint», и «volume» типа «int». Поле «id» сделать автоинкрементным с начальным значением 1 и шагом 1 и определить его как первичный ключ с именем «PK_ teacher». Полю «id» запретить значения «NULL», полям «id_discipline», «id_teacher», «id_group» и «volume» разрешить значения
«NULL». Полю «volume» задать значение по умолчанию 0. Для поля «id_discipline» добавить ограничение вторичного ключа с именем «FK_learnplan_discipline» и ссылкой на первичный ключ «id» таблицы «discipline» – задать связь между главной таблицей «discipline» и подчиненной «learnplan» по первичному и вторичному ключу соответственно. Для поля «id_dgroup» добавить ограничение вторичного ключа с именем «FK_learnplan_studgroup» и ссылкой на первичный ключ «id» таблицы «studgroup» – задать связь между главной таблицей «studgroup» и подчиненной «learnplan» по первичному и вторичному ключу соответственно. Для поля «id_teacher» добавить ограничение вторичного ключа с именем «FK_learnplan_teacher» и ссылкой на первичный ключ «id» таблицы «teacher» – задать связь
34
между главной таблицей «teacher» и подчиненной «learnplan» по первичному и вторичному ключу соответственно:
CREATE TABLE learnplan (id bigint IDENTITY(1,1) NOT NULL CONSTRAINT PK_learnplan PRIMARY KEY, id_discipline bigint NULL CONSTRAINT FK_learnplan_discipline FOREIGN KEY REFERENCES discipline (id), id_teacher bigint NULL CONSTRAINT FK_learnplan_teacher FOREIGN KEY REFERENCES teacher (id), id_group bigint NULL CONSTRAINT FK_learnplan_studgroup FOREIGN KEY REFERENCES studgroup (id), volume int NULL DEFAULT (0));
4.10. Создать таблицу «temp» с полями «id» типа
«bigint» и «name» типа «nvarchar(50)». Поле «id» сделать автоинкрементным с начальным значением 1 и шагом 1 и определить его как первичный ключ с именем «PK_faculty». Полю «id» запретить значения «NULL», полю «name» разрешить значения «NULL»:
CREATE TABLE temp (id bigint IDENTITY(1,1) NOT NULL CONSTRAINT PK_faculty PRIMARY KEY, name nvarchar(50) NULL);
4.11. Добавить в таблицу «faculty» индекс по полю
«name» с именем «idx_name»:
CREATE INDEX idx_faculty ON faculty (name);
5. Написать запросы на удаление
5.1.Удаление индекса с именем «idx_faculty»:
DROP INDEX idx_faculty;
5.2. Удаление ограничения значение по умолча-
нию с именем «dflt_volume»:
DROP CONSTRAINT dflt_volume;
35
5.3. Удаление ограничения уникальности с именем «unq_name»:
DROP CONSTRAINT unq_name;
5.4. Удаление ограничения проверки с именем
«ck_pay»:
DROP CONSTRAINT ck_pay;
5.5. Удаление вторичного ключа с именем
«FK_student_group»:
DROP CONSTRAINT FK_group;
5.6. Удаление первичного ключа с именем
«PK_student»:
DROP CONSTRAINT PK_student;
5.7.Удаление поля «name» из таблицы «temp»:
ALTER TABLE temp DROP COLUMN name;
5.8.Удаление таблицы «temp»:
DROP TABLE temp;
6. Написать запросы на изменение таблиц
6.1. Изменить таблицу «faculty» добавив в нее поле «shortname» типа «nvarchar(10)» и разрешить ему значения NULL:
ALTER TABLE faculty ADD shortname nvarchar(10) NULL;
6.2. Изменить таблицу «chair» добавив ей ограничение первичного ключа с именем «PK_chair» для поля «id»:
ALTER TABLE chair ADD CONSTRAINT PK_chair PRIMARY KEY(id);
6.3.Изменить таблицу «chair» добавив ей ограни-
36
чение вторичного ключа с именем «FK_chair_faculty» для поля «id_faculty» (вторичный ключ) и ссылкой на первичный ключ «id» таблицы «faculty» – задать связь между главной таблицей «faculty» и подчиненной «chair» по первичному и вторичному ключу соответственно:
|
|
|
ALTER TABLE |
chair ADD |
CONSTRAINT |
FK_chair_faculty |
FOREIGN |
KEY(id_faculty) |
REFERENCES faculty (id); |
|
|
|
|
|
6.4. Изменить таблицу «post» добавив ей ограничение уникальности для поля «name», для поля «pay» задать ограничение проверки – значение этого поля должно быть в диапазоне от 0 до 50000:
ALTER TABLE post ADD CONSTRAINT unq_name UNIQUE(name), CONCTRAINT ck_pay CHECK(pay>=0 AND pay<=50000);
6.5. Изменить таблицу «chair» добавив ей ограничение вторичного ключа с именем «FK_teacher_chair» для поля «id_chair» (вторичный ключ) и ссылкой на первичный ключ «id» таблицы «chair» – задать связь между главной таблицей «chair» и подчиненной «teacher» по первичному и вторичному ключу соответственно:
|
|
|
ALTER TABLE |
teacher ADD |
CONSTRAINT |
FK_teacher_chair |
FOREIGN |
KEY(id_chair) |
REFERENCES chair (id); |
|
|
|
|
|
6.6. Изменить таблицу «chair» добавив ей ограничение вторичного ключа с именем «FK_teacher_post» для поля «id_post» (вторичный ключ) и ссылкой на первичный ключ «id» таблицы «post» – задать связь между главной таблицей «post» и подчиненной «teacher» по первичному и вторичному ключу соответственно:
37
ALTER TABLE teacher ADD CONSTRAINT
FK_teacher_post FOREIGN KEY(id_post) REFERENCES post (id);
6.7. Изменить таблицу «speciality» добавив ей ограничение вторичного ключа с именем «FK_speciality_faculty» для поля «id_faculty» (вторичный ключ) и ссылкой на первичный ключ «id» таблицы «faculty» – задать связь между главной таблицей «faculty» и подчиненной «speciality» по первичному и вторичному ключу соответственно:
|
ALTER TABLE speciality ADD |
CONSTRAINT |
|
|
|
|
|||
|
FK_speciality_faculty |
FOREIGN |
KEY(id_faculty) |
|
|
REFERENCES faculty (id); |
|
|
|
|
|
|
|
|
6.8. Изменить таблицу «studgroup» добавив ей ограничение вторичного ключа с именем «FK_studgroup_speciality» для поля «id_speciality» (вторичный ключ) и ссылкой на первичный ключ «id» таблицы «speciality» – задать связь между главной таблицей «speciality» и подчиненной «studgroup» по первичному и вторичному ключу соответственно:
ALTER TABLE studgroup ADD CONSTRAINT
FK_studgroup_speciality FOREIGN KEY(id_speciality) REFERENCES speciality (id);
6.9. Изменить таблицу «student» добавив ей ограничение вторичного ключа с именем «FK_student_studgroup» для поля «id_group» (вторичный ключ) и ссылкой на первичный ключ «id» таблицы «studgroup» – задать связь между главной таблицей «studgroup» и подчиненной «student» по первичному и вторичному ключу соответственно:
|
ALTER TABLE student ADD |
CONSTRAINT |
|
|
|
|
|||
|
|
|||
|
FK_student_studgroup |
FOREIGN |
KEY(id_group) |
|
|
REFERENCES studgroup (id); |
|
|
|
|
|
|
|
|
|
|
38 |
|
|