КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Задание для аудиторного выполнения
Создайте следующие таблицы с указанными ограничениями целостности:
ВНИМАНИЕ. Наша база данных имеет структуру с так называемыми рекурсивными определениями референциальных ссылок. Имеется в виду следующее: таблица TEACHER ссылается на DEPARTMENT, которая, в свою очередь, ссылается на таблицу FACULTY. В то же самое время таблицы DEPARTMENT и FACULTY ссылаются на TEACHER. В связи с эти определение этих таблиц следует произвести следующим образом:
- Сначала определяются таблицы FACULTY и DEPARTMENT, причем их столбцы DeanFK и HeadFK (которые должны ссылаться на таблицу FACULTY) определяются без их ссылок (то есть без фраз REFERENCES)
- .Затем определяется таблица FACULTY (со ссылкой на таблицу DEPARTMENT)
- Наконец, с помощью предложения ALTER TABLE производится доопределение столбцов DeanFK и HeadFK с указанием внешних ключей на таблицу TEACHER. DeanFK HeadFK
Примечание. В терминах языке ER-моделирования наша база данных имеет следующую структуру:
Имя таблицы
| Имя столбца
| Тип данных столбца
| Длина
(точность)
| Масштаб
| Назначение и ограничения целостности столбца
| FACULTY
| FacPK
| integer
|
|
| Первичный ключ таблицы FACULTY
| Name
| varchar2
|
|
| Название факультета; уникальное, не может быть NULL
| DeanFK
| integer
|
|
| Декан факультета. Внешний ключ, ссылающийся на TchPK в TEACHER. Если удаляется преподаватель, являющийся деканом, то ссылка на него устанавливается в NULL.
| Building
| char
|
|
| Корпус, в котором располагается деканат факультета. Принимает значения ’1’, ’2’, ’3’, ’4’, ’5’, ’6’, ’7’, ’8’, ’9’, ’10’
| Fund
| number
|
|
| Фонд финансирования факультета. Принимает значения больше 100000.00
| Ограничение целостности таблицы
|
| DEPARTMENT
| DepPK
| integer
|
|
| Первичный ключ таблицы
| FacFK
| integer
|
|
| Факультет кафедры. Внешний ключ, ссылающийся на FacPK в FACULTY. Нельзя удалить факультет, если на нем имеется хотя бы одна кафедра.
| Name
| varchar2
|
|
| Название кафедры. Не может быть NULL
| HeadFK
| integer
|
|
| Заведующий кафедры. Внешний ключ, ссылающийся на TchPK в TEACHER. Если удаляется преподаватель, являющийся зав. кафедрой, то ссылка на него устанавливается в NULL.
| Building
| char
|
|
| Корпус, в котором располагается кафедра Принимает значения из списка ’1’, ’2’, ’3’, ’4’, ’5’, ’6’, ’7’, ’8’, ’9’, ’10’
| Fund
| number
|
|
| Фонд финансирования кафедры. Принимает значения в диапазоне 20000.00- 100000.00
| Ограничение целостности таблицы
| Пара столбцов (FacFK,name) уникальна (то есть на факультете не может быть кафедр с повторяющимися названиями)
| TEACHER
| TchPK
| integer
|
|
| Первичный ключ таблицы
| DepFK
| integer
|
|
| Кафедра, на которой работает преподаватель, Внешний ключ, ссылающийся на DepPK в DEPARTMENT. Если удаляется кафедра, то автоматически устанавливаются в NULL все ссылки на нее.
| Name
| varchar2
|
|
| Фамилия преподавателя. Не может быть NULL
| Post
| varchar2
|
|
| Должность преподавателя Принимает значения из списка: ассистент, преподаватель, доцент, профессор
| Tel
| char
|
|
| Рабочий телефон преподавателя
| Hiredate
| date
|
|
| Дата приема на работу. Должна быть больше 01.01.1950; не может быть NULL
| Salary
| number
|
|
| Ставка. Должна быть больше 1000, не может быть NULL
| Commission
| number
|
|
| Надбавка к ставке. Значение по умолчанию равно 0. Не может быть отрицательной.
| ChiefFK
| Integer
|
|
| Непосредственный руководитель преподавателя. Внешний ключ, ссылающийся на первичный ключ TchPK таблицы TEACHER. Если удаляется преподаватель, то все ссылки на него как на руководителя устанавливаются в NULL.
| Ограничение целостности таблицы
| a) Commission должно быть по крайне мере в два раза меньше, чем Salary
b) Salary + Commission должен находиться в диапазоне 1000 - 3000
с) ChiefFK не должен быть равен TchPK (то есть преподаватель не может быть руководителем самого себя)
| SGROUP
| GrpPK
| integer
|
|
| Первичный ключ таблицы
| DepFK
| integer
|
|
| Кафедра группы. Внешний ключ, ссылающийся на DepPK в DEPARTMENT. При удалении кафедры все ссылки не нее становятся NULL.
| Course
| number
|
|
| Курс группы. Принимает значения из списка: 1, 2, 3, 4, 5, 6
| Num
| number
|
|
| Номер группы. Принимает значения больше 0 и меньше 700
| Quantity
| number
|
|
| Количество студентов в группе. Принимает значения в интервале 1 – 50
| Curator
| integer
|
|
| Куратор группы Внешний ключ, ссылающийся на TchPK в TEACHER. При удалении преподавателя все ссылки на него как на куратора становятся NULL.
| Rating
| number
|
|
| Рейтинг группы. Значение по умолчанию равно 0 Принимает значения в диапазоне 0–100.
| Ограничение целостности таблицы
| Пара значений столбцов (DepFK, Num) является UNIQUE (то есть на одной кафедре не могут быть группы с одинаковыми номерами)
Пара значений столбцов внешних ключей (DepFK, Curator) является уникальной. То есть один и тот же преподаватель не может быть куратором более, чем одной группы на одной кафедре)
| SUBJECT
| SbjPK
| integer
|
|
| Первичный ключ таблицы
| Name
| varchar2
|
|
| Название дисциплины. Должно быть уникальным и не равным NULL
| Ограничение целостности таблицы
|
| ROOM
| RomPK
| integer
|
|
| Первичный ключ таблицы
| Num
| number
|
|
| Номер аудитории. Не может принимать значение NULL
| Seats
| number
|
|
| Количество место в аудитории Принимает значения в интервале 1 - 300
| Floor
| number
|
|
| Этаж аудитории Принимает значения в интервале 1 - 16
| Building
| char
|
|
| Корпус аудитории. Не может принимать значение NULL. Принимает значения из списка ’1’, ’2’, ’3’, ’4’, ’5’, ’6’, ’7’, ’8’, ’9’, ’10’
| Ограничение целостности таблицы
| Пара значений столбцов (Num, Building) является уникальной (то есть в одном корпусе на могут быть аудитории с одинаковыми номерами)
| LECTURE
| TchFK
| integer
|
|
| Преподаватель. Внешний ключ, ссылающийся на TchPK в TEACHER. При удалении преподавателя все ссылки на него устанавливаются в NULL.
| GrpFK
| integer
|
|
| Группа. Внешний ключ, ссылающийся на GrpPK в SGROUP. При удалении группы удаляются все лекции, читаемые этой группе.
| SbjFK
| integer
|
|
| Дисциплина Внешний ключ, ссылающийся на SbjPK в SUBJECT. Дисциплина не может быть удалена до тех пор, пока не удалены все лекции, читаемые по этой дисциплине.
| RomFK
| integer
|
|
| Аудитория. Внешний ключ, ссылающийся на RomPK в ROOM. При удалении аудитории все ссылки на нее устанавливаются в NULL.
| Type
| varchar2
|
|
| Тип занятия. Принимает значения из списка: лекция, лабораторная, семинар, практика.
Не может быть NULL
| Day
| char
|
|
| День недели. Принимает значения из списка: пон, втр, срд, чет, пят, суб, вск.
Не может быть NULL
| Week
| number
|
|
| Неделя. Принимает значения 1 или 2.
Не может быть NULL
| Lesson
| number
|
|
| Занятие (пара) Принимает значения в интервале 1 – 8.
Не может быть NULL
| Ограничение целостности таблицы
| Столбцы (GrpFK, Day, Week, Lesson) в совокупности являются UNIQUE (то есть у одной группы не может быть два различных занятия на одной и той же паре одного и того же дня недели и одной и той же недели)
Столбцы ((TchFK, Day, Week, Lesson) в совокупности являются UNIQUE (то есть, то же самое имеет место и для преподавателя)
| | | | | | | |
Контрольные вопросы
Дайте ответы на следующие вопросы:
1) Какова цель ограничений целостности?
2) Какие типы ограничений целостности вы знаете?
3) Какие синтаксические формы ограничений целостности вы знаете? В чем различие между ними?
4) Что означает ограничение UNIQUE? Что такое составной уникальный ключ? Какой синтаксис может использоваться для описания составного уникального ключа (синтаксис ограничения столбца или синтаксис ограничения таблицы)? Может ли столбец с ограничением UNIQUE принимать значения NULL? Можно ли одновременно устанавливать ограничения UNIQUE и PRIMARY KEY для одного и того же столбца (совокупности столбцов)?
5) Что означает ограничение PRIMARY KEY? Что такое составной первичный ключ? Какой синтаксис может использоваться для описания составного первичного ключа (синтаксис ограничения столбца или синтаксис ограничения таблицы)? Сколько первичных ключей может содержать таблица? Может ли столбец с ограничением PRIMARY KEY принимать значения NULL?
6) Что означает ограничение NULL (NOT NULL)? Какое значение по умолчанию принимается, если это ограничение не указывается явно? Можно ли задавать это ограничение в синтаксисе ограничения таблицы?
7) Что означает ограничение целостности FOREIGN KEY (референциальное ограничение целостности)? Определите следующие понятия: референциальный ключ, внешний ключ, родительская таблица, дочерняя таблица. Какие ограничением целостности должна обладать тот столбец (совокупность столбцов), на который делается ссылка из внешнего ключа? Можно ли определить референциальный ключ и внешний ключ в одной и той же таблице? Что означает составной внешний ключ? Какой синтаксис может использоваться для описания составного внешнего ключа (синтаксис ограничения столбца или синтаксис ограничения таблицы)? Можно ли определить внешний ключ в одним столбцом в синтаксисе ограничения таблицы? Можно ли использовать один и тот же столбец (совокупность столбцов) в качестве первичного ключа и внешнего ключа? Можно ли использовать один и тот же столбец (совокупность столбцов) в качестве внешнего ключа и уникального ключа? Можно ли несколько внешних ключей в одной таблице? Можно ли устанавливать значение NULL для вненего ключа (составного внешнего ключа)? Можно ли определить референциальное ограничение целостности в предложении CREATE TABLE, которое содержит фразу AS subquery? Можно ли при определении внешнего ключа опускать имена столбцов родительской таблицы? Что означает фраза ON DELETE в определении внешнего ключа? Что означает отсутствие фразы ON DELETE в определении внешнего ключа?
8) Что означает ограничение целостности CHECK? Когда условие ограничения CHECK считается выполненным (удовлетворяется)? Можно ли определить ограничение CHECK над несколькими столбцами в синтаксисе ограничения столбца? Можно ли задать несколько ограничений CHECK для одного столбца? Проверяет ли Oracle тот факт, что множество ограничений CHECK, сформулированных для одного столбца, являются взаимно исключающими? Можно ли определить ограничение CHECK над столбцами различных таблиц?
|