Лекция 3: Построение БД, ddl›екция_3.pdf · Лекция 3:...

67
Лекция 3: Лекция 3: Построение БД, DDL Построение БД, DDL Лектор: Лектор: Николаев В.В. Николаев В.В. 2016-2017 уч. год 2016-2017 уч. год

Upload: others

Post on 15-Aug-2020

13 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

Лекция 3:Лекция 3:Построение БД, DDLПостроение БД, DDL

Лектор:Лектор:Николаев В.В.Николаев В.В.

2016-2017 уч. год2016-2017 уч. год

Page 2: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

КР - этапыКР - этапы

1) представление предметной области (4.03.2017)

2) ER-модель (31.03.2017)

3) Даталогическая модель (06.05.2017)

4) Итоговое построение БД (01.06.2017)

Page 3: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

Курсовая работаКурсовая работа

ER-модель базы данных должна включать:

● не менее 10 реляционных таблиц

● хотя бы одна связь «многие-ко-многим»

Для защиты каждого этапа нужен отчёт!

Page 4: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

1. Построение БД: 1. Построение БД: внутренний уровеньвнутренний уровень

Page 5: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

● Обобщенное представление всех пользователей и приложений базы данных (в виде ER-модели).

● Обеспечивает логическую независимость данных.

Инфологический уровеньИнфологический уровень

Page 6: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

● Сущность — любой различимый объект, факт, явление, событие, идея или предмет, информацию о котором необходимо хранить в базе данных (~ таблица)

● Экземпляр сущности относится к конкретной вещи в наборе. Типом сущности может быть СТРАНА , а экземпляром — Франция и т. д. (~ строка)

● Атрибут — поименованная характеристика (свойство) сущности (~ столбец)

● Связь — ассоциирование двух или более сущностей.

Основные элементы ИМОсновные элементы ИМ

Page 7: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

Уровни СУБД (SPARC):

1.Внешний (пользовательский).

2.Концептуальный (инфологический).

3.Внутренний (физический).

Цель: обеспечить независимость хранимых данных от использующих их программ/пользователей.

Трехуровневая архитектураТрехуровневая архитектура

Page 8: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

● Описание желаемого способа организации базы данных в среде хранения выбранной СУБД

● Организация физической независимости данных (скрытие подробностей физического хранения данных)

Внутренний уровеньВнутренний уровень

Page 9: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

2. Реляционное представление 2. Реляционное представление (flash-forward...)(flash-forward...)

Page 10: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

Реляционная БДРеляционная БД

Э. Кодд: любое представление данных можно свести к совокупности отношений

Отношение (relation) - двумерные таблицы особого вида

Таблицы состоят из заголовка и тела

Page 11: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

● Каждый атрибут определяется некоторым допустимым набором значений

● Домен — множество атомарных значений одного и того же типа

● Смысл доменов: если значения двух атрибутов берутся из одного и того же домена, то имеют смысл сравнения, использующие эти два атрибута

ДоменыДомены

Page 12: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

Основные правила (1)Основные правила (1)

● Заголовок состоит из такого фиксированного множества атрибутов A1, A2, ..., An, что существует взаимно однозначное соответствие между этими атрибутами Ai и определяющими их доменами Di (i = 1, 2, 3, ..., n).

● Тело состоит из меняющегося во времени множества кортежей.

Page 13: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

Основные правила (2)Основные правила (2)

● Каждый кортеж состоит из множества пар атрибут-значение, по одной паре для каждого атрибута из заголовка.

● Для любой заданной пары атрибут(A)-значение(v), v является значением из единственного домена D, который связан с атрибутом A.

Page 14: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

Базовые понятияБазовые понятия

● Степень отношения — это число его атрибутов (отношение степени один - унарное, степени два — бинарное, степени n — n-арное).

● Кардинальное число (мощность отношения) — это число его кортежей.

● Кардинальное число отношения изменяется во времени.

Page 15: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

ПримерПример

КОД_МУЖЧИНЫ

ФАМИЛИЯ ИМЯ ОТЧЕСТВО ДАТА_РОЖДЕНИЯ

МЕСТО_РОЖДЕНИЯ

1 Колокольцев Георгий Макарович 1980-12-01 г. Москва

2 Эрдниев Сергей Фомич 1992-03-12 г. Санкт-Петербург

3 Кузнецов Андрей Гаврилович 1987-10-14 пос. Упёртовка

4 Дебилко Анатолий Вячеславович 1983-07-12 Село Верхние Мандроги

5 Кабицин Аким Тарасович 1991-12-01 NULL

Page 16: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

В итогеВ итоге

● отношение — таблица;

● кортеж — строка (запись);

● атрибут — столбец (поле);

Page 17: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

3. Создание реляционной БД3. Создание реляционной БД

Page 18: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

Объекты БДОбъекты БД

● Объекты базы данных - таблицы, представления, процедуры, триггеры

● Для работы с объектами БД используется SQL

Page 19: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

Предложения SQLПредложения SQL

Предложения SQL, 3 группы:

● Предложения манипуляции данными (Data Manipulation Language, DML)

● Предложения определения данных (Data Definition Language, DDL)

● Предложения определения доступа к данным (Data Control Language, DCL)

Page 20: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

Составляющие языка SQLСоставляющие языка SQL

● Предложения;

● Идентификаторы (имена);

● Константы;

● Операторы;

● Зарезервированные и ключевые слова;

Page 21: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

Предложения SQLПредложения SQL

Предложение — команда, которая состоит из ключевых и зарезервированных слов, определяемых пользователем в соответствии с синтаксическими правилами.

● SELECT * FROM STUDENTS;

Page 22: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

ИдентификаторыИдентификаторы

● Имена объектов баз данных (определенные пользователем или системные).

● Создается при определении объекта.

● Используется для обращения к объекту:

SELECT * FROM STUDENTS;

Page 23: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

Любые значения, которые не являются идентификаторами или ключевыми словами:

● числовые значения: 9999, 5Е6

● строки символов: 'Пример строки'

● значения, связанные с представлением времени (дата и время): 06-03-2017 10:06:54

● булевы значения: TRUE

КонстантыКонстанты

Page 24: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

ОператорыОператоры

● Служат для обозначения действия над одним или несколькими выражениями.

● Делятся на категории: арифметические, логические, присваивания, сравнения и тд.

● SELECT * FROM STUDENTS WHERE AGE > 5;

Page 25: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

Зарезервированные и ключевые Зарезервированные и ключевые словаслова

Слова и фразы для задания конструкций и использования возможностей языка SQL;

SELECT * FROM STUDENTS WHERE AGE > 5;

Page 26: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

4. Работа с таблицами4. Работа с таблицами

Page 27: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

Создание таблицСоздание таблиц

Таблицы:

● Базовые — в действительности существующие, хранящиеся в физической памяти машины.

● Виртуальные — представления, курсоры, неименованные таблицы (таблицы, которые не существуют постоянно в базе данных).

Page 28: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

Операторы определения данных (Data Definition Language, DDL):

● CREATE создает объект БД (саму базу, таблицу, представление, пользователя и т. д.);

● ALTER изменяет объект;

● DROP удаляет объект.

DDLDDL

Page 29: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

Используется предложение CREATE TABLE:

Создание базовой таблицыСоздание базовой таблицы

CREATE TABLE STUDENTS ( STUD_ID integer, STUD_NAME text, BIRTH_DATE date);

Page 30: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

Используется предложение DROP TABLE:

Удаление базовой таблицыУдаление базовой таблицы

DROP TABLE STUDENTS;

Page 31: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

Используется предложение ALTER:

Изменение таблицИзменение таблиц

ALTER TABLE STUDENTS ADD COLUMN STUD_GROUP text;

ALTER TABLE STUDENTS DROP COLUMN BIRTH_DATE;

Page 32: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

Типы данныхТипы данных

Каждая колонка имеет свой тип данных:

● Ограничивает список возможных значений, которые могут находится в этой колонке

● Определяет «смысл» данных, хранящихся в колонке, чтобы данные могли использоваться при вычислениях.

Page 33: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

Типы данныхТипы данных

CREATE TABLE STUDENTS ( STUD_ID integer, STUD_NAME text, BIRTH_DATE date);

Тип данных задается при создании:

Page 34: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

Типы данных (PostgreSQL)Типы данных (PostgreSQL)

● Числовые типы

● Символьные типы

● Дата/Время

● ...

Page 35: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

Числовые типыЧисловые типы

PostgreSQL:

● smallint — целые числа (2 байта)

● integer — целые числа (4 байта)

● bigint — целые числа (8 байт)

Page 36: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

Числовые типыЧисловые типы

PostgreSQL:

● decimal, numeric — числа с точностью, указываемой пользователем (точное число)

● real — неточное число (переменная точность)

Page 37: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

Символьные типыСимвольные типы

PostgreSQL:

● varchar(n) — переменной длины с ограничением.

● char(n) — фиксированной длины, остаток заполняется пробелами.

● text — переменной длины без задаваемого ограничения.

где n — положительное число

CREATE TABLE STUDENT (ST_NAME char(25));INSERT INTO STUDENT VALUES ('Valery');

Page 38: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

Логический типЛогический тип

Тип boolean:

● может иметь состояния: «true», «false» (третье состояние, «unknown» представляется SQL-значением NULL)

● Состояние «true» может задаваться следующими значениями: TRUE, 'true', 't', 'yes', 'y', 'on', '1'

● Состояние «false» может задаваться следующими значениями: FALSE, 'false', 'f', 'no', 'n', 'off', '0'

Page 39: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

Типы даты/времениТипы даты/времени

PostgreSQL:

● time — время суток;

● timestamp — дата и время;

● date — дата;

● interval — временной интервал;

TIMESTAMP '2016-11-23 11:13:44+01'

Page 40: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

NULL-значенияNULL-значения

● NULL — специальное значение (пустое, несуществующее значение), которое может быть записано в поле таблицы базы данных.

● NULL-значения нужно рассматривать как "отсутствие информации" (не как пустые строки, пробелы и тд).

Page 41: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

● Значения типа NULL не равны друг другу

● Столбец, содержащий значение NULL , игнорируется при вычислениях агрегатных значений

● В предложениях с DISTINCT, ORDER BY, GROUP BY, значения NULL не отличаются друг от друга.

NULL-значенияNULL-значения

Page 42: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

Значения по умолчаниюЗначения по умолчанию

CREATE TABLE GROUPS (

GR_ID integer,

GR_NAME text,

GR_COUNT integer DEFAULT 0

);

Значение по умолчанию может быть выражением

Page 43: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

Ограничения целостностиОграничения целостности

● Типы данных — один из способов ограничивать данные, но его не всегда достаточно.

● SQL позволяет определять ограничения для колонок и таблиц.

Page 44: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

CHECKCHECK

CREATE TABLE STUDENTS (

ST_ID integer,

ST_NAME text,

FAILED_COURSES integer

CHECK (FAILED_COURSES >= 0)

);

Page 45: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

CHECKCHECK

● Позволяет задать для определённой колонки, выражение, которое будет осуществлять проверку, помещаемого в эту колонку значения.

● Выражение должно возвращать Логическое значение

● Проверка check проходит, если выражение, указанное в ограничении возвращает значение истина или null

Page 46: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

CHECKCHECK

Ограничению можно задать имя (чтобы на него ссылаться):

CREATE TABLE STUDENTS (

ST_ID integer,

ST_NAME text,

FAILED_COURSES integer CONSTRAINT fcrs CHECK (FAILED_COURSES >= 0)

);

Page 47: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

CHECKCHECK

Ограничение можно накладывать на таблицу:

CREATE TABLE STUDENTS (

ST_ID integer,

FAILED_MAX integer,

FAILED_COURSES integer,

CONSTRAINT fcrs

CHECK

(FAILED_COURSES >= 0 AND

FAILED_COURSE <= FAILED_MAX)

);

Page 48: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

NOT NULLNOT NULL

Колонка не должна содержать значение null:

CREATE TABLE STUDENTS (

ST_ID integer NOT NULL,

FAILED_MAX numeric NOT NULL,

FAILED_COURSES integer NOT NULL

);

Логически эквивалентно созданию ограничения:

CHECK (column_name IS NOT NULL)

Page 49: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

Ограничение уникальностиОграничение уникальности

Данные в колонке или группе колонок являются уникальными по отношению к данным из той же колонки/группы колонок для других строк в той же таблице:

CREATE TABLE STUDENTS (

ST_ID integer NOT NULL UNIQUE,

ST_NAME text NOT NULL,

ST_SURNAME text NOT NULL,

ST_BIRTH date NOT NULL

);

Page 50: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

Ограничение уникальностиОграничение уникальности

CREATE TABLE STUDENTS (

ST_ID integer UNIQUE NOT NULL,

ST_NAME text NOT NULL,

ST_SURNAME text NOT NULL,

ST_BIRTH date NOT NULL,

UNIQUE (ST_NAME, ST_SURNAME, ST_BIRTH)

);

Page 51: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

Первичный ключПервичный ключ

CREATE TABLE STUDENTS (

ST_ID integer PRIMARY KEY,

ST_NAME text NOT NULL,

ST_SURNAME text NOT NULL,

ST_BIRTH date NOT NULL,

UNIQUE (ST_NAME, ST_SURNAME, ST_BIRTH)

);

Page 52: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

Первичный ключПервичный ключ

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

● Ограничение первичного ключа эквивалентно комбинации ограничений уникальности и не-null

● Таблица может иметь не более одного первичного ключа.

Page 53: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

Первичный ключ (PostgreSQL)Первичный ключ (PostgreSQL)

● Добавление первичного ключа автоматически создает уникальный b-tree индекс на колонку.

● PostgreSQL позволяет не создавать первичный ключ для таблицы (согласно теории требуется наличие первичного ключа для каждой таблицы).

Page 54: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

Внешний ключВнешний ключ

● Позволяет отобразить связи между различными сущностями.

● Обслуживает ссылочную целостность между двумя относящимися друг к другу таблицами.

Группа Принадлежность Студент1 М

Page 55: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

CREATE TABLE GROUP ( GR_ID integer PRIMARY KEY, GR_NAME text);CREATE TABLE STUDENT ( ST_ID integer PRIMARY KEY, ST_NAME text, GR_ID integer REFERENCES GROUP (GR_ID));

Внешний ключВнешний ключ

Group isStudentInGroup Student1 М

Page 56: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

CREATE TABLE GROUP ( GR_ID integer PRIMARY KEY, GR_NAME text);

CREATE TABLE STUDENT ( ST_ID integer PRIMARY KEY, ST_NAME text, GR_ID integer REFERENCES GROUP (GR_ID));

Внешний ключВнешний ключ

GR_ID GR_NAME1 3119

ST_ID ST_NAME GR_ID42 Chuck Norris 1

Page 57: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

CREATE TABLE GROUP ( GR_ID integer PRIMARY KEY, GR_NAME text);

CREATE TABLE STUDENT ( ST_ID integer PRIMARY KEY, ST_NAME text, GR_ID integer REFERENCES GROUP);

*(сокр. Запись) — будет использовано значение первичного ключа из таблицы GROUP

Внешний ключВнешний ключ

GR_ID GR_NAME1 3119

ST_ID ST_NAME GR_ID42 Chuck Norris 1

Page 58: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

Внешний ключВнешний ключ

● Значения в колонках, обозначенных внешним ключом в одной таблице, должны соответствовать значениям в соответствующих колонках таблицы, с которой организуется связь.

● Внешний ключ должен ссылаться на колонки, которые либо являются первичным ключом, либо уникальны (с соответствующим ограничением).

● Внешний ключ может ссылаться на одну или несколько колонок.

Page 59: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

Внешний ключ (?)Внешний ключ (?)

CREATE TABLE GROUP ( GR_ID integer PRIMARY KEY, GR_NAME text);

CREATE TABLE STUDENT ( ST_ID integer PRIMARY KEY, ST_NAME text, GR_ID integer REFERENCES GROUP);

Что произойдет при удалении группы?DELETE FROM GROUP WHERE GR_ID = 1;

GR_ID GR_NAME1 3119

ST_ID ST_NAME GR_ID42 Chuck Norris 1

Page 60: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

ВариантыВарианты

1. Ничего не делать.

2. Удалить каскадно.

3. Отменить удаление.

4. Установить в null.

5. Установить значение по умолчанию.

Page 61: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

CREATE TABLE GROUP ( GR_ID integer PRIMARY KEY, GR_NAME text);

CREATE TABLE STUDENT ( ST_ID integer PRIMARY KEY, ST_NAME text, GR_ID integer REFERENCES GROUP ON DELETE CASCADE);

*другие варианты: ON DELETE RESTRICT, ON DELETE SET DEFAULT, ON DELETE SET NULL**аналогично ON UPDATE ...

Внешний ключВнешний ключ

GR_ID GR_NAME1 3119

ST_ID ST_NAME GR_ID42 Chuck Norris 1

Page 62: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

5. Отображение ER-диаграмм в БД5. Отображение ER-диаграмм в БД

Page 63: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

ОтображениеОтображение

● Сущность — таблица

● Экземпляр сущности — строка таблицы

● Атрибут — столбец в таблице

● Связь — внешний ключ, таблица

Page 64: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

Связь «один-к-*»Связь «один-к-*»

● Реализуется путем добавления в таблицу внешнего ключа.

● Внешний ключ обычно добавляется в сущность-ассоциацию или в сущность-характеристику.

● Для моделирования характера связи на внешний ключ вводятся доп. ограничения (например, «один-к-одному» - UNIQUE).

Page 65: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

● Для реализации связи вида «многие-ко-многим» создается вспомогательная таблица:

Связь «многие-ко-многим»Связь «многие-ко-многим»

Студент Процесс сдачи ЭкзаменМ М

Page 66: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

CREATE TABLE STUDENT ( ST_ID integer PRIMARY KEY, ST_NAME text);

Связь «многие-ко-многим»Связь «многие-ко-многим»

CREATE TABLE EXAM ( EX_ID integer PRIMARY KEY, EX_NAME text);

CREATE TABLE STUD_TO_EXAM ( ST_ID integer REFERENCES STUDENTS, EX_ID integer REFERENCES EXAMS, PRIMARY KEY (ST_ID, EX_ID));

Student St-to-Exam ExamМ М

Page 67: Лекция 3: Построение БД, DDL›екция_3.pdf · Лекция 3: Построение БД, ddl Лектор: Николаев В.В. 2016-2017 уч. год. КР

При подготовке презентации использовались материалы из:

● Введение в реляционные базы данных / В. В. Кириллов, Г. Ю. Громов, Издательство: BHV, 2009 г.

● Документация PostgreSQL: https://postgrespro.ru/docs/postgresql/9.4/index.html

ЛитератураЛитература

Лицензия к документации PostgreSQL:Юридическое уведомлениеPostgreSQL © 1996-2015 — PostgreSQL Global Development Group.Postgres95 © 1994-5 — Регенты университета Калифорнии.

Настоящим разрешается использование, копирование, модификация и распространение данного программного продукта и документации для любых целей, бесплатно и без письменного разрешения, при условии сохранения во всех копиях приведённого выше уведомления об авторских правах и данного параграфа вместе с двумя последующими параграфами.

УНИВЕРСИТЕТ КАЛИФОРНИИ НИ В КОЕЙ МЕРЕ НЕ НЕСЁТ ОТВЕТСТВЕННОСТИ ЗА ПРЯМОЙ, КОСВЕННЫЙ, НАМЕРЕННЫЙ, СЛУЧАЙНЫЙ ИЛИ СПРОВОЦИРОВАННЫЙ УЩЕРБ, В ТОМ ЧИСЛЕ ПОТЕРЯННЫЕ ПРИБЫЛИ, СВЯЗАННЫЙ С ИСПОЛЬЗОВАНИЕМ ЭТОГО ПРОГРАММНОГО ПРОДУКТА И ЕГО ДОКУМЕНТАЦИИ, ДАЖЕ ЕСЛИ УНИВЕРСИТЕТ КАЛИФОРНИИ БЫЛ УВЕДОМЛЁН О ВОЗМОЖНОСТИ ТАКОГО УЩЕРБА.

УНИВЕРСИТЕТ КАЛИФОРНИИ ЯВНЫМ ОБРАЗОМ ОТКАЗЫВАЕТСЯ ОТ ЛЮБЫХ ГАРАНТИЙ, В ЧАСТНОСТИ ПОДРАЗУМЕВАЕМЫХ ГАРАНТИЙ КОММЕРЧЕСКОЙ ВЫГОДЫ ИЛИ ПРИГОДНОСТИ ДЛЯ КАКОЙ-ЛИБО ЦЕЛИ. НАСТОЯЩИЙ ПРОГРАММНЫЙ ПРОДУКТ ПРЕДОСТАВЛЯЕТСЯ В ВИДЕ "КАК ЕСТЬ", И УНИВЕРСИТЕТ КАЛИФОРНИИ НЕ ДАЁТ НИКАКИХ ОБЯЗАТЕЛЬСТВ ПО ЕГО ОБСЛУЖИВАНИЮ, ПОДДЕРЖКЕ, ОБНОВЛЕНИЮ, УЛУЧШЕНИЮ ЛИ МОДИФИКАЦИИ.