Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SQL в примерах.doc
Скачиваний:
8
Добавлен:
19.08.2019
Размер:
138.75 Кб
Скачать

Ограничение первичных ключей

Первичные ключи таблицы – это специальные случаи комбинирования ограничений UNIQUE и NOT NULL. Первичные ключи имеют следующие особенности:

  • таблица может содержать только один первичный ключ ;

  • внешние ключи по умолчанию ссылаются на первичный ключ таблицы;

  • первичный ключ является идентификатором строк таблицы (строки, однако, могут идентифицироваться и другими способами).

Пример. Создать таблицу STUDENT с первичным ключом по полю STUDENT_ID :

CREATE TABLE STUDENT

( STUDENT_ID INTEGER PRIMARY KEY,

SURNAME VARCHAR(60) NOT NULL,

NAME VARCHAR(60) NOT NULL,

STIPEND DOUBLE,

KURS INTEGER,

CITY VARCHAR(60),

BIRTHDAY DATE,

UNIV_ID INTEGER);

Составные первичные ключи

Ограничение PRIMARY KEY может также применено для нескольких полей, составляющих уникальную комбинацию значений – составной первичный ключ.

Пример. Создать таблицу EXAM_MARKS с учетом того, чтобы в таблице не могли появиться разные записи для одинаковых комбинаций значений полей STUDENT_ID и EXAM_ID (конкретный студент на конкретном экзамене не может получить более одной оценки).

CREATE TABLE NEW_EXAM_MARKS

( EXAM_ID INTEGER NOT NULL,

STUDENT_ID INTEGER NOT NULL,

SUBJ_ID INTEGER NOT NULL,

MARK CHAR(1),

EXAM_DATE DATE NOT NULL,

CONSTRAINT EX_PR_KEY PRIMARY KEY (EXAM_ID, STUDENT_ID));

Проверка значений полей check

Ограничение CHECK позволяет определять условие, которому должно удовлетворять вводимое в поле таблицы значение, прежде чем оно будет принято. Любая попытка обновить или заменить значение поля такими, для которых предикат, задаваемый ограничением CHECK, имеет значение ложь, будет отвергаться.

Пример. Создать таблицу STUDENT. На столбец STIPEND наложить ограничение – величина стипендии должна быть не меньше 200:

CREATE TABLE STUDENT

( STUDENT_ID INTEGER PRIMARY KEY,

SURNAME VARCHAR(60) NOT NULL,

NAME VARCHAR(60) NOT NULL,

STIPEND INTEGER CHECK (STIPEND<200),

KURS INTEGER,

CITY VARCHAR(60),

BIRTHDAY DATE,

UNIV_ID INTEGER);

Проверка ограничивающих условий с использованием составных полей

Пример. Создать таблицу STUDENT. На столбец STIPEND наложить ограничение – величина стипендии должна быть не меньше 200 для студентов, живущих в Воронеже:

CREATE TABLE STUDENT

( STUDENT_ID INTEGER PRIMARY KEY,

SURNAME VARCHAR(60) NOT NULL,

NAME VARCHAR(60) NOT NULL,

STIPEND INTEGER,

KURS INTEGER,

CITY VARCHAR(60),

BIRTHDAY DATE,

UNIV_ID INTEGER UNIQUE ,

CHECK (STIPEND<200 AND CITY=’Воронеж’));

Или

CREATE TABLE STUDENT

( STUDENT_ID INTEGER PRIMARY KEY,

SURNAME VARCHAR(60) NOT NULL,

NAME VARCHAR(60) NOT NULL,

STIPEND INTEGER,

KURS INTEGER,

CITY VARCHAR(60),

BIRTHDAY DATE,

UNIV_ID INTEGER UNIQUE,

CONSTRAINT STUD_CHECK CHECK (STIPEND<200 AND CITY=’Воронеж’));

Установка значений по умолчанию

Пример. Создать таблицу STUDENT. Для столбца CITY установить значениие по умолчанию ’Воронеж’:

CREATE TABLE STUDENT

( STUDENT_ID INTEGER PRIMARY KEY,

SURNAME VARCHAR(60) NOT NULL,

NAME VARCHAR(60) NOT NULL,

STIPEND INTEGER CHECK (STIPEND<200),

KURS INTEGER,

CITY VARCHAR(60) DEFAULT ’Воронеж’,

BIRTHDAY DATE,

UNIV_ID INTEGER);

Задание 2.

  1. Создайте таблицу EXAM_MARKS так, чтобы не допускался ввод в таблицу двух записей об оценках одного студента по конкретным экзамену и предмету обучения, и чтобы не допускалось проведение двух экзаменов по любым предметам в один день.

  2. Создайте таблицу предметов обучения SUBJECT так, чтобы количество отводимых на предмет часов по умолчанию было равно 36, не допускались записи в отсутствующим количеством часов, поле SUBJ_ID являлось первичным ключом таблицы и значение семестров (поле SEMESTR) лежали в диапазоне от 1 до 12.

  3. Создайте таблицу EXAM_MARKS таким образом, чтобы значения поля EXAM_ID было больше значений поля SUBJ_ID, а значения поля SUBJ_ID было больше значений поля STUDENT _ID; пусть также будут запрещены значения NULL в любом из этих трех полей.