Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Методическое пособие 241

.pdf
Скачиваний:
4
Добавлен:
30.04.2022
Размер:
675.96 Кб
Скачать

«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