Лекция 3. Атрибуты и ключи
Термины
- Отношение — таблица в БД.
- Кортеж — строка значений в таблице.
- Атрибут — столбец в таблице.
Свойства
- Отношения не упорядочены между собой.
- Атрибуты внутри отношения не упорядочены.
- Каждый кортеж уникален.
У каждого атрибута (столбца) должно быть уникальное имя в рамках своей таблицы.
У каждого кортежа есть по одному значению каждого атрибута, и это значение принадлежит домену атрибута в рамках таблицы.
Info
Множество допустимых значений данного атрибута, определяющее его тип данных и накладывающее ограничения на значения.
Основные виды атрибутов
| Вид атрибута | Описание | Пример |
|---|---|---|
| Простой | Неделимый, нельзя разделить на более мелкие части | Имя, цена |
| Составной | Делимый, состоит из нескольких податрибутов | Адрес (страна, город, улица, дом) |
| Однозначный | Имеет одно значение для каждой записи | Дата рождения, ID пользователя |
| Многозначный | Может иметь несколько значений | Номера телефонов, e-mail’ы человека |
| Производный | Вычисляется из других атрибутов | Стоимость со скидкой = цена − цена × процент_скидки |
Основные виды доменов
| Вид домена | Пример |
|---|---|
| Тип данных + ограничения | VARCHAR(50) (имя), DECIMAL(10, 2) (цена), ограничения UNIQUE, NOT NULL |
| Целостность данных | Связывание таблиц через FOREIGN KEY → PRIMARY KEY гарантирует связность и целостность данных |
| Согласованность | E-mail должен содержать @, возраст $\ge 0$ и т.д. |
Характеристики
- Степень отношения — количество атрибутов.
- Кардинальность отношения — количество кортежей в таблице.
- Кардинальность атрибута — количество уникальных значений в атрибуте.
- Селективность — количество (или доля) строк, удовлетворяющих выражению
WHERE.
Реляционные ключи
- Суперключ — набор атрибутов, уникально идентифицирующий каждый кортеж.
- Потенциальный ключ — минимальный суперключ (нельзя выбросить ни одного атрибута без потери уникальности).
- Первичный ключ (Primary Key) — выбранный потенциальный ключ.
- Внешний ключ (Foreign Key) — ссылается на PK из другой таблицы.
- Альтернативный ключ — потенциальный ключ, не выбранный первичным.
Типы реляционных ключей
- Простой — состоит из одного атрибута.
- Составной — из нескольких атрибутов.
- Естественный — атрибут, который сущность содержит сама по себе и который имеет смысл (фамилия, если есть гарантия уникальности).
- Суррогатный — атрибут, не имеющий смысла для сущности (например,
id).
Important
Главный недостаток естественного ключа — он иногда может меняться (например, фамилия после замужества).
Tip
Лучше всего использовать суррогатный ключ:
- целочисленный (
SERIAL,BIGSERIAL), или - UUID (Universal Unique Identifier).
Типы данных
- Целочисленные (
smallint,int,bigint) - С плавающей точкой (
decimal,real) - Строки (
varchar,char,text) - Дата и время (
date,time,timestamp,interval) - Логический (
bool) - Геометрические (
point,path,line) - JSON
NULL
| Тип данных | Пояснение |
|---|---|
smallint | Целое небольшого диапазона ($-32768 … 32767$) |
int | Стандартное целое, 4 байта ($-2^{31} … 2^{31}-1$) |
bigint | Очень большие целые числа, 8 байт |
decimal | Число с фиксированной точностью |
real | Число с плавающей точкой (аналог float) |
varchar | Строка переменной длины с ограничением |
char | Строка фиксированной длины |
text | Длинный текст без ограничения длины |
date / time | Дата / время |
timestamp | Отметка времени (дата + время) |
interval | Промежуток времени |
bool | true / false |
point | Геометрическая точка |
path | Геометрический путь из нескольких точек |
line | Линия бесконечной длины |
JSON | Структурированные данные в формате JSON |
DML
Info
Язык манипулирования данными.
| Виды | Описание |
|---|---|
SELECT | Получение данных из таблиц |
INSERT | Добавляет новые кортежи в таблицу |
UPDATE | Обновляет существующие кортежи |
DELETE | Удаляет существующие записи по условию |
MERGE | Выполняет вставку и обновление одновременно: • запись существует → обновляем • записи нет → добавляем новую |
DDL
Info
Язык описания (определения) данных.
| Виды | Описание |
|---|---|
CREATE TABLE | Создаёт таблицу |
ALTER TABLE | Изменяет структуру существующей таблицы |
DROP | Удаляет таблицу из БД |
TRUNCATE | Удаляет все кортежи, оставляя структуру таблицы для дальнейшего использования |