Лекция 3: Построение БД, ddl›екция_3.pdf · Лекция 3:...
TRANSCRIPT
Лекция 3:Лекция 3:Построение БД, DDLПостроение БД, DDL
Лектор:Лектор:Николаев В.В.Николаев В.В.
2016-2017 уч. год2016-2017 уч. год
КР - этапыКР - этапы
1) представление предметной области (4.03.2017)
2) ER-модель (31.03.2017)
3) Даталогическая модель (06.05.2017)
4) Итоговое построение БД (01.06.2017)
Курсовая работаКурсовая работа
ER-модель базы данных должна включать:
● не менее 10 реляционных таблиц
● хотя бы одна связь «многие-ко-многим»
Для защиты каждого этапа нужен отчёт!
1. Построение БД: 1. Построение БД: внутренний уровеньвнутренний уровень
● Обобщенное представление всех пользователей и приложений базы данных (в виде ER-модели).
● Обеспечивает логическую независимость данных.
Инфологический уровеньИнфологический уровень
● Сущность — любой различимый объект, факт, явление, событие, идея или предмет, информацию о котором необходимо хранить в базе данных (~ таблица)
● Экземпляр сущности относится к конкретной вещи в наборе. Типом сущности может быть СТРАНА , а экземпляром — Франция и т. д. (~ строка)
● Атрибут — поименованная характеристика (свойство) сущности (~ столбец)
● Связь — ассоциирование двух или более сущностей.
Основные элементы ИМОсновные элементы ИМ
Уровни СУБД (SPARC):
1.Внешний (пользовательский).
2.Концептуальный (инфологический).
3.Внутренний (физический).
Цель: обеспечить независимость хранимых данных от использующих их программ/пользователей.
Трехуровневая архитектураТрехуровневая архитектура
● Описание желаемого способа организации базы данных в среде хранения выбранной СУБД
● Организация физической независимости данных (скрытие подробностей физического хранения данных)
Внутренний уровеньВнутренний уровень
2. Реляционное представление 2. Реляционное представление (flash-forward...)(flash-forward...)
Реляционная БДРеляционная БД
Э. Кодд: любое представление данных можно свести к совокупности отношений
Отношение (relation) - двумерные таблицы особого вида
Таблицы состоят из заголовка и тела
● Каждый атрибут определяется некоторым допустимым набором значений
● Домен — множество атомарных значений одного и того же типа
● Смысл доменов: если значения двух атрибутов берутся из одного и того же домена, то имеют смысл сравнения, использующие эти два атрибута
ДоменыДомены
Основные правила (1)Основные правила (1)
● Заголовок состоит из такого фиксированного множества атрибутов A1, A2, ..., An, что существует взаимно однозначное соответствие между этими атрибутами Ai и определяющими их доменами Di (i = 1, 2, 3, ..., n).
● Тело состоит из меняющегося во времени множества кортежей.
Основные правила (2)Основные правила (2)
● Каждый кортеж состоит из множества пар атрибут-значение, по одной паре для каждого атрибута из заголовка.
● Для любой заданной пары атрибут(A)-значение(v), v является значением из единственного домена D, который связан с атрибутом A.
Базовые понятияБазовые понятия
● Степень отношения — это число его атрибутов (отношение степени один - унарное, степени два — бинарное, степени n — n-арное).
● Кардинальное число (мощность отношения) — это число его кортежей.
● Кардинальное число отношения изменяется во времени.
ПримерПример
КОД_МУЖЧИНЫ
ФАМИЛИЯ ИМЯ ОТЧЕСТВО ДАТА_РОЖДЕНИЯ
МЕСТО_РОЖДЕНИЯ
1 Колокольцев Георгий Макарович 1980-12-01 г. Москва
2 Эрдниев Сергей Фомич 1992-03-12 г. Санкт-Петербург
3 Кузнецов Андрей Гаврилович 1987-10-14 пос. Упёртовка
4 Дебилко Анатолий Вячеславович 1983-07-12 Село Верхние Мандроги
5 Кабицин Аким Тарасович 1991-12-01 NULL
В итогеВ итоге
● отношение — таблица;
● кортеж — строка (запись);
● атрибут — столбец (поле);
3. Создание реляционной БД3. Создание реляционной БД
Объекты БДОбъекты БД
● Объекты базы данных - таблицы, представления, процедуры, триггеры
● Для работы с объектами БД используется SQL
Предложения SQLПредложения SQL
Предложения SQL, 3 группы:
● Предложения манипуляции данными (Data Manipulation Language, DML)
● Предложения определения данных (Data Definition Language, DDL)
● Предложения определения доступа к данным (Data Control Language, DCL)
Составляющие языка SQLСоставляющие языка SQL
● Предложения;
● Идентификаторы (имена);
● Константы;
● Операторы;
● Зарезервированные и ключевые слова;
Предложения SQLПредложения SQL
Предложение — команда, которая состоит из ключевых и зарезервированных слов, определяемых пользователем в соответствии с синтаксическими правилами.
● SELECT * FROM STUDENTS;
ИдентификаторыИдентификаторы
● Имена объектов баз данных (определенные пользователем или системные).
● Создается при определении объекта.
● Используется для обращения к объекту:
SELECT * FROM STUDENTS;
Любые значения, которые не являются идентификаторами или ключевыми словами:
● числовые значения: 9999, 5Е6
● строки символов: 'Пример строки'
● значения, связанные с представлением времени (дата и время): 06-03-2017 10:06:54
● булевы значения: TRUE
КонстантыКонстанты
ОператорыОператоры
● Служат для обозначения действия над одним или несколькими выражениями.
● Делятся на категории: арифметические, логические, присваивания, сравнения и тд.
● SELECT * FROM STUDENTS WHERE AGE > 5;
Зарезервированные и ключевые Зарезервированные и ключевые словаслова
Слова и фразы для задания конструкций и использования возможностей языка SQL;
SELECT * FROM STUDENTS WHERE AGE > 5;
4. Работа с таблицами4. Работа с таблицами
Создание таблицСоздание таблиц
Таблицы:
● Базовые — в действительности существующие, хранящиеся в физической памяти машины.
● Виртуальные — представления, курсоры, неименованные таблицы (таблицы, которые не существуют постоянно в базе данных).
Операторы определения данных (Data Definition Language, DDL):
● CREATE создает объект БД (саму базу, таблицу, представление, пользователя и т. д.);
● ALTER изменяет объект;
● DROP удаляет объект.
DDLDDL
Используется предложение CREATE TABLE:
Создание базовой таблицыСоздание базовой таблицы
CREATE TABLE STUDENTS ( STUD_ID integer, STUD_NAME text, BIRTH_DATE date);
Используется предложение DROP TABLE:
Удаление базовой таблицыУдаление базовой таблицы
DROP TABLE STUDENTS;
Используется предложение ALTER:
Изменение таблицИзменение таблиц
ALTER TABLE STUDENTS ADD COLUMN STUD_GROUP text;
ALTER TABLE STUDENTS DROP COLUMN BIRTH_DATE;
Типы данныхТипы данных
Каждая колонка имеет свой тип данных:
● Ограничивает список возможных значений, которые могут находится в этой колонке
● Определяет «смысл» данных, хранящихся в колонке, чтобы данные могли использоваться при вычислениях.
Типы данныхТипы данных
CREATE TABLE STUDENTS ( STUD_ID integer, STUD_NAME text, BIRTH_DATE date);
Тип данных задается при создании:
Типы данных (PostgreSQL)Типы данных (PostgreSQL)
● Числовые типы
● Символьные типы
● Дата/Время
● ...
Числовые типыЧисловые типы
PostgreSQL:
● smallint — целые числа (2 байта)
● integer — целые числа (4 байта)
● bigint — целые числа (8 байт)
Числовые типыЧисловые типы
PostgreSQL:
● decimal, numeric — числа с точностью, указываемой пользователем (точное число)
● real — неточное число (переменная точность)
Символьные типыСимвольные типы
PostgreSQL:
● varchar(n) — переменной длины с ограничением.
● char(n) — фиксированной длины, остаток заполняется пробелами.
● text — переменной длины без задаваемого ограничения.
где n — положительное число
CREATE TABLE STUDENT (ST_NAME char(25));INSERT INTO STUDENT VALUES ('Valery');
Логический типЛогический тип
Тип boolean:
● может иметь состояния: «true», «false» (третье состояние, «unknown» представляется SQL-значением NULL)
● Состояние «true» может задаваться следующими значениями: TRUE, 'true', 't', 'yes', 'y', 'on', '1'
● Состояние «false» может задаваться следующими значениями: FALSE, 'false', 'f', 'no', 'n', 'off', '0'
Типы даты/времениТипы даты/времени
PostgreSQL:
● time — время суток;
● timestamp — дата и время;
● date — дата;
● interval — временной интервал;
TIMESTAMP '2016-11-23 11:13:44+01'
NULL-значенияNULL-значения
● NULL — специальное значение (пустое, несуществующее значение), которое может быть записано в поле таблицы базы данных.
● NULL-значения нужно рассматривать как "отсутствие информации" (не как пустые строки, пробелы и тд).
● Значения типа NULL не равны друг другу
● Столбец, содержащий значение NULL , игнорируется при вычислениях агрегатных значений
● В предложениях с DISTINCT, ORDER BY, GROUP BY, значения NULL не отличаются друг от друга.
NULL-значенияNULL-значения
Значения по умолчаниюЗначения по умолчанию
CREATE TABLE GROUPS (
GR_ID integer,
GR_NAME text,
GR_COUNT integer DEFAULT 0
);
Значение по умолчанию может быть выражением
Ограничения целостностиОграничения целостности
● Типы данных — один из способов ограничивать данные, но его не всегда достаточно.
● SQL позволяет определять ограничения для колонок и таблиц.
CHECKCHECK
CREATE TABLE STUDENTS (
ST_ID integer,
ST_NAME text,
FAILED_COURSES integer
CHECK (FAILED_COURSES >= 0)
);
CHECKCHECK
● Позволяет задать для определённой колонки, выражение, которое будет осуществлять проверку, помещаемого в эту колонку значения.
● Выражение должно возвращать Логическое значение
● Проверка check проходит, если выражение, указанное в ограничении возвращает значение истина или null
CHECKCHECK
Ограничению можно задать имя (чтобы на него ссылаться):
CREATE TABLE STUDENTS (
ST_ID integer,
ST_NAME text,
FAILED_COURSES integer CONSTRAINT fcrs CHECK (FAILED_COURSES >= 0)
);
CHECKCHECK
Ограничение можно накладывать на таблицу:
CREATE TABLE STUDENTS (
ST_ID integer,
FAILED_MAX integer,
FAILED_COURSES integer,
CONSTRAINT fcrs
CHECK
(FAILED_COURSES >= 0 AND
FAILED_COURSE <= FAILED_MAX)
);
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)
Ограничение уникальностиОграничение уникальности
Данные в колонке или группе колонок являются уникальными по отношению к данным из той же колонки/группы колонок для других строк в той же таблице:
CREATE TABLE STUDENTS (
ST_ID integer NOT NULL UNIQUE,
ST_NAME text NOT NULL,
ST_SURNAME text NOT NULL,
ST_BIRTH date NOT NULL
);
Ограничение уникальностиОграничение уникальности
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)
);
Первичный ключПервичный ключ
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)
);
Первичный ключПервичный ключ
● Первичный ключ означает, что колонка (группа колонок) используются как уникальный идентификатор строки в таблице
● Ограничение первичного ключа эквивалентно комбинации ограничений уникальности и не-null
● Таблица может иметь не более одного первичного ключа.
Первичный ключ (PostgreSQL)Первичный ключ (PostgreSQL)
● Добавление первичного ключа автоматически создает уникальный b-tree индекс на колонку.
● PostgreSQL позволяет не создавать первичный ключ для таблицы (согласно теории требуется наличие первичного ключа для каждой таблицы).
Внешний ключВнешний ключ
● Позволяет отобразить связи между различными сущностями.
● Обслуживает ссылочную целостность между двумя относящимися друг к другу таблицами.
Группа Принадлежность Студент1 М
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 М
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
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
Внешний ключВнешний ключ
● Значения в колонках, обозначенных внешним ключом в одной таблице, должны соответствовать значениям в соответствующих колонках таблицы, с которой организуется связь.
● Внешний ключ должен ссылаться на колонки, которые либо являются первичным ключом, либо уникальны (с соответствующим ограничением).
● Внешний ключ может ссылаться на одну или несколько колонок.
Внешний ключ (?)Внешний ключ (?)
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
ВариантыВарианты
1. Ничего не делать.
2. Удалить каскадно.
3. Отменить удаление.
4. Установить в null.
5. Установить значение по умолчанию.
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
5. Отображение ER-диаграмм в БД5. Отображение ER-диаграмм в БД
ОтображениеОтображение
● Сущность — таблица
● Экземпляр сущности — строка таблицы
● Атрибут — столбец в таблице
● Связь — внешний ключ, таблица
Связь «один-к-*»Связь «один-к-*»
● Реализуется путем добавления в таблицу внешнего ключа.
● Внешний ключ обычно добавляется в сущность-ассоциацию или в сущность-характеристику.
● Для моделирования характера связи на внешний ключ вводятся доп. ограничения (например, «один-к-одному» - UNIQUE).
● Для реализации связи вида «многие-ко-многим» создается вспомогательная таблица:
Связь «многие-ко-многим»Связь «многие-ко-многим»
Студент Процесс сдачи ЭкзаменМ М
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М М
При подготовке презентации использовались материалы из:
● Введение в реляционные базы данных / В. В. Кириллов, Г. Ю. Громов, Издательство: BHV, 2009 г.
● Документация PostgreSQL: https://postgrespro.ru/docs/postgresql/9.4/index.html
ЛитератураЛитература
Лицензия к документации PostgreSQL:Юридическое уведомлениеPostgreSQL © 1996-2015 — PostgreSQL Global Development Group.Postgres95 © 1994-5 — Регенты университета Калифорнии.
Настоящим разрешается использование, копирование, модификация и распространение данного программного продукта и документации для любых целей, бесплатно и без письменного разрешения, при условии сохранения во всех копиях приведённого выше уведомления об авторских правах и данного параграфа вместе с двумя последующими параграфами.
УНИВЕРСИТЕТ КАЛИФОРНИИ НИ В КОЕЙ МЕРЕ НЕ НЕСЁТ ОТВЕТСТВЕННОСТИ ЗА ПРЯМОЙ, КОСВЕННЫЙ, НАМЕРЕННЫЙ, СЛУЧАЙНЫЙ ИЛИ СПРОВОЦИРОВАННЫЙ УЩЕРБ, В ТОМ ЧИСЛЕ ПОТЕРЯННЫЕ ПРИБЫЛИ, СВЯЗАННЫЙ С ИСПОЛЬЗОВАНИЕМ ЭТОГО ПРОГРАММНОГО ПРОДУКТА И ЕГО ДОКУМЕНТАЦИИ, ДАЖЕ ЕСЛИ УНИВЕРСИТЕТ КАЛИФОРНИИ БЫЛ УВЕДОМЛЁН О ВОЗМОЖНОСТИ ТАКОГО УЩЕРБА.
УНИВЕРСИТЕТ КАЛИФОРНИИ ЯВНЫМ ОБРАЗОМ ОТКАЗЫВАЕТСЯ ОТ ЛЮБЫХ ГАРАНТИЙ, В ЧАСТНОСТИ ПОДРАЗУМЕВАЕМЫХ ГАРАНТИЙ КОММЕРЧЕСКОЙ ВЫГОДЫ ИЛИ ПРИГОДНОСТИ ДЛЯ КАКОЙ-ЛИБО ЦЕЛИ. НАСТОЯЩИЙ ПРОГРАММНЫЙ ПРОДУКТ ПРЕДОСТАВЛЯЕТСЯ В ВИДЕ "КАК ЕСТЬ", И УНИВЕРСИТЕТ КАЛИФОРНИИ НЕ ДАЁТ НИКАКИХ ОБЯЗАТЕЛЬСТВ ПО ЕГО ОБСЛУЖИВАНИЮ, ПОДДЕРЖКЕ, ОБНОВЛЕНИЮ, УЛУЧШЕНИЮ ЛИ МОДИФИКАЦИИ.