1.52M
Category: databasedatabase

Лекция 4. Ключи и связи PostgreSQL

1.

Проектирование
реляционных БД
Ключи и связи между таблицами

2.

Реляционная БД
Реляционная база данных — это совокупность
взаимосвязанных таблиц, каждая из которых
содержит информацию об объектах определенного типа.
Строка таблицы (кортеж) содержит данные об одном
объекте (например, товаре, клиенте), а столбцы
таблицы (атрибуты) описывают различные
характеристики этих объектов — атрибутов (например,
наименование, код товара, сведения о клиенте).
Записи, т. е. строки таблицы, имеют одинаковую
структуру — они состоят из полей, хранящих атрибуты
объекта.
Каждое поле, т. е. столбец, описывает только одну
характеристику объекта и имеет строго определенный
тип данных. Все записи имеют одни и те же поля, только
в них отображаются различные информационные
свойства объекта.

3.

Реляционная система
Реляционные системы основаны на реляционной модели данных –
абстрактной теории данных, основанной на некоторых положениях
математической теории.
Принципы модели заложены в 1969-70х гг. Е.Ф. Коддом из IBM
В настоящий момент эти принципы стали стандартом де-факто в
технологии баз данных.
Кодд ввел ставшей классической терминологию:
Формальный реляционный термин
Отношение
Кортеж
Кардинальное число
Атрибут
Степень
Первичный ключ
Домен
Неформальный эквивалент
Таблица
Строка или запись
Количество строк
Столбец или поле
Количество столбцов
Уникальный идентификатор
Общая совокупность допустимых значений

4.

5.

Ключи БД
В реляционной базе данных каждая таблица должна
иметь первичный ключ — поле или комбинацию полей,
которые единственным образом идентифицируют
каждую строку таблицы.
Если ключ состоит из нескольких полей, он называется
составным.
Ключ должен быть уникальным и однозначно
определять запись.
По значению ключа можно отыскать единственную
запись.
Ключи служат также для упорядочивания информации в
БД.

6.

Ключи БД
• Если в таблице имеется уникальный идентификатор,
например номер продукта, который однозначно
определяет каждый продукт в каталоге, его можно
использовать в качестве первичного ключа таблицы, но
значения этого столбца должны быть различными для всех
записей.
• Первичный ключ не должен содержать повторяющихся
значений. Например, не следует использовать в качестве
первичного ключа имена людей, т. к. они не являются
уникальными. В одной таблице могут существовать две
записи с одинаковыми именами.
• Первичный ключ должен всегда иметь значение. Если
столбец может содержать неназначенное или
отсутствующее значение, его не следует использовать в
качестве компонента первичного ключа.
• Значение первичного ключа не должно меняться.

7.

Использование ключей для связи таблиц
• В базе данных с
несколькими
таблицами
первичный ключ
одной таблицы
может
использоваться в
качестве ссылки в
других таблицах. Если
первичный ключ
изменяется, это
изменение
необходимо
применить ко всем
ссылкам на этот ключ.

8.

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

9.

Типы связей
Связь один-к-одному предполагает, что одному атрибуту
первой таблицы соответствует только один атрибут второй
таблицы и наоборот.
Связь один-ко-многим предполагает, что одному атрибуту
первой таблицы соответствует несколько атрибутов второй
таблицы.
Связь многие-ко-многим предполагает, что одному атрибуту
первой таблицы соответствует несколько атрибутов второй
таблицы и наоборот.

10.

Выборка из нескольких таблиц
Часто выборку данных надо производить из отношения,
которое является результатом слияния (join) двух других
отношений.
Для этого СУБД предварительно должна выполнить слияние
таблиц, а только затем произвести выборку из полученного
отношения.
Для выполнения операции такого рода в операторе SELECT
после ключевого слова FROM указывается список таблиц, по
которым производится поиск данных. После ключевого слова
WHERE указывается условие, по которому производится
слияние, для устранения неоднозначности перед именем
поля указывается имя таблицы и знак "."

11.

Выборка из нескольких таблиц
Используем базу данных спортсменов, содержащую две
таблицы: tbl_sport и tbl_city для получения таблицы
спортсменов, содержащую города вместо id из таблицы
tbl_sport:
SELECT tbl_sport.id, tbl_sport.surname, tbl_sport.name,
tbl_sport.fname, tbl_sport_ksport, tbl_city.city
FROM tbl_sport, tbl_city
WHERE tbl_sport.city_id=tbl_city.id
Этот запрос выведет содержимое таблицы tbl_sport до ее
преобразования. Это означает, что в процессе преобразования
структуры таблицы (разделения ее на две таблицы) мы не
потеряли данные.

12.

Связи между таблицами
CREATE TABLE tbl_city (
id SERIAL PRIMARY KEY,
city VARCHAR(255))
ALTER TABLE sportmans
ADD COLUMN city_id
INTEGER
INSERT INTO tbl_city(city)
SELECT DISTINCT
sportmans.city FROM
sportmans
UPDATE sportmans
SET id = tbl_city.id
English     Русский Rules