
Термины
Отношения - таблица в бд
Кортежи - строка значений в таблице
Атрибут - столбец в таблице
Свойства
Отношения - не упорядочены Атрибуты - не упорядочены Кортежи - каждый из кортежей уникален
У каждого атрибута(столбца) должно быть уникальное значение в рамках своей таблицы.
У каждого кортежа есть по 1 значению каждого атрибута, которое принадлежит домену атрибута в рамках таблицы в которой содержится данный кортеж.
[!info] Домен атрибута ^atr-domen Это множество допустимых значений данного атрибута, определяющее его тип данных и накладывающее ограничение на его значения
Основные виды атрибутов:
| Вид атрибута | Описание | Пример |
|---|---|---|
| Простой | Неделимые, невозможно разделить на более мелкие части. | Имя, цена |
| Составной | Делимые, могут состоять из нескольких податрибутов. | Адрес (Страна,город,улица, дом) |
| Однозначный | Принадлежит только одно значение для каждой записи. | Дата рождения, id пользователя |
| Многозначный | Может иметь несколько значений | Номера телефонов или электронные почты человека |
| Производный | Вычисляются из других атрибутов | Стоимость товара со скидкой стоимость со скидкой = цена - (цена * процент скидки ) |
Основные виды доменов:
| Вид домена | Пример |
|---|---|
| Тип данных + ограничения | VARCHAR(50) (имя), DECIMAL(10, 2) (цена), ограничения UNIQUE, NOT NULL |
| Целостность данных | Когда связываем таблицу с FORING KEY, с таблицей по PRIMARY KEY, так мы гарантируем связность и целостность данных |
| Согласованность | Например, что наше значение электронной почты должно содержать в себе @. Возраст должен быть $\ge$ 0 и так далее |
Определения
- Степень отношения - количество атрибутов
- Кардинальность отношения - количество кортежей в данной таблице
- Кардинальность атрибутов - количество уникальных значений в атрибуте
- Селективность - количество строк удовлетворяющих выражению
WHERE
Реляционные ключи
- Супер ключ - набор атрибутов которые уникально идентифицируют каждый кортеж
- Потенциальный ключ - минимальный супер ключ
- Первичный ключ (Primary key) - выбранный потенциальный ключ
- Вторичный ключ (Foring key ) - ссылается на PK из другой таблицы
- Альтернативный ключ - не выбранный потенциальный ключ
Типы реляционных ключей
- Простой ключ - состоит из одного атрибута
- Составной - из нескольких атрибутов
- Естественный - атрибут, который сущность содержит само по себе, имеет значение (Фамилия, если есть гарантия, что она одна будет в нашей базе -> Все фамилии уникальны)
- Суррогатный - атрибут, который не имеет значения для сущности (Например: id)
[!important] Недостаток естественного ключа - иногда он может меняться
[!tip] Лучше всего использовать суррогатный, который будет:
- Целочисленный
- uuid (universal unique identifier)
Типы данных:
- Целочисленные типы (smallint, int, bigint)
- С плавающей точкой (decimal, real)
- Строки (varchar, char, text)
- Дата и время (date time, timestamp, interval)
- Логический тип (bool)
- Геометрические (point, path, line)
- JSON
- NULL
| Тип данных | Пример / Пояснение |
|---|---|
| smallint | целое число небольшого диапазона (0 - 32767) |
| int | Стандартное целое чисто $2^{32}$ ($-2^{16}, 0, 2^{16} -1$) |
| bigint | Очень большие числа |
| decimal | Число с фиксированной точностью |
| varchar | Строка переменной длины с заданным ограничением по ее длинне |
| char | Строка фиксированной длины, всегда строки с определенной длинной |
| text | Длинный текст |
| date time | Дата и время |
| timestamp | Отметка времени |
| interval | Промежуток времени |
| bool | true, false |
| point | геометрическая точка |
| path | геометрический путь состоящий из нескольких точек |
| line | Линяя бесконечной длины |
| JSON | Структурированные данные в формате json |
| real | Число с плавающей точкой аналог float |
DML
[!info] DML Это язык манипулирования данными
| Виды | Описание |
|---|---|
| SELECT | Получение данных таблиц базы данных |
| INSERT | Добавляет новые кортежи в таблицу базы данных |
| UPDATE | Обновляет существующие кортежи в таблице |
| DELETE | Удаляет существующие записи по заданному условию |
| MERGE | Выполняет функции вставки и обновления одновременно. Запись существует -> обновляем Запись не существует -> добавляем новую |
DDL
[!info] DDL Это язык описания данных
| Виды | Описание |
|---|---|
| CREATE TABLE | Создает таблицу |
| ALTER TABLE | Изменяет структуру существующей таблицы |
| DROP | Удаляет таблицу из БД |
| TRUNCATE | Удаляет все кортежи оставляя атрибуты для дальнейшего использования таблицы |