1. Основы реляционных баз данных. Язык запросов SQL Flashcards

1
Q

Что такое реляционная база данных?

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Как хранятся данные?

A

Реляционная база данных представляет собой набор таблиц (сущностей). Таблицы состоят из колонок и строк (кортежей). Внутри таблиц могут быть определены ограничения, между таблицами существуют отношения. При помощи SQL можно выполнять запросы, которые возвращают наборы данных, получаемых из одной или нескольких таблиц. В рамках одного запроса данные получаются из нескольких таблиц путем их соединения (JOIN), чаще всего для соединения используются те же колонки, которые определяют отношения между таблицами.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Что такое primary key и foreign key?

A

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

Для создания ограничения внешнего ключа после FOREIGN KEY указывается столбец таблицы, который будет представляет внешний ключ. А после ключевого слова REFERENCES указывается имя связанной таблицы, а затем в скобках имя связанного столбца, на который будет указывать внешний ключ. После выражения REFERENCES идут выражения ON DELETE и ON UPDATE, которые задают действие при удалении и обновлении строки из главной таблицы соответственно.
CREATE TABLE Customers
(
    Id INT PRIMARY KEY AUTO_INCREMENT,
    Age INT, 
    FirstName VARCHAR(20) NOT NULL,
    LastName VARCHAR(20) NOT NULL,
    Phone VARCHAR(20) NOT NULL UNIQUE
);
CREATE TABLE Orders
(
    Id INT PRIMARY KEY AUTO_INCREMENT,
    CustomerId INT,
    CreatedAt Date,
    FOREIGN KEY (CustomerId)  REFERENCES Customers (Id)
);
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Что такое отношение один ко многим?

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Что такое отношение многие ко многим?

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Что такое отношение один к одному?

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Что такое constraint?

A

Ограничения SQL используются для указания правил для данных в таблице. Ограничения используются для ограничения типа данных, которые могут попадать в таблицу. Это обеспечивает точность и достоверность данных в таблице. Если есть какое-либо нарушение между ограничением и действием данных, действие отменяется. Ограничения могут быть на уровне столбца или таблицы. Ограничения уровня столбца применяются к столбцу, а ограничения уровня таблицы применяются ко всей таблице. В SQL обычно используются следующие ограничения:
NOT NULL - гарантирует, что столбец не может иметь значение NULL.
UNIQUE - гарантирует, что все значения в столбце различны.
PRIMARY KEY - комбинация NOT NULL и UNIQUE. Уникально идентифицирует каждую строку в таблице.
FOREIGN KEY - Уникально идентифицирует строку / запись в другой таблице.
CHECK - Гарантирует, что все значения в столбце удовлетворяют определенному условию.
DEFAULT - Устанавливает значение по умолчанию для столбца, когда значение не указано.
INDEX - Используется для очень быстрого создания и извлечения данных из базы данных

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Что такое join? Какие виды join ты знаешь,

A

JOIN — оператор языка SQL, который является реализацией операции соединения реляционной алгебры. Входит в предложение FROM операторов SELECT, UPDATE и DELETE.

Операция соединения, как и другие бинарные операции, предназначена для обеспечения выборки данных из двух таблиц и включения этих данных в один результирующий набор. Отличительными особенностями операции соединения являются следующие:

  • в схему таблицы-результата входят столбцы обеих исходных таблиц (таблиц-операндов), то есть схема результата является «сцеплением» схем операндов;
  • каждая строка таблицы-результата является «сцеплением» строки из одной таблицы-операнда со строкой второй таблицы-операнда.

Определение того, какие именно исходные строки войдут в результат и в каких сочетаниях, зависит от типа операции соединения и от явно заданного условия соединения. Условие соединения, то есть условие сопоставления строк исходных таблиц друг с другом, представляет собой логическое выражение (предикат).

INNER JOIN
Оператор внутреннего соединения INNER JOIN соединяет две таблицы. Порядок таблиц для оператора неважен, поскольку оператор является коммутативным.

Заголовок таблицы-результата является объединением (конкатенацией) заголовков соединяемых таблиц.

Тело результата логически формируется следующим образом. Каждая строка одной таблицы сопоставляется с каждой строкой второй таблицы, после чего для полученной «соединённой» строки проверяется условие соединения (вычисляется предикат соединения). Если условие истинно, в таблицу-результат добавляется соответствующая «соединённая» строка.

Описанный алгоритм действий является строго логическим, то есть он лишь объясняет результат, который должен получиться при выполнении операции, но не предписывает, чтобы конкретная СУБД выполняла соединение именно указанным образом. Существует несколько способов реализации операции соединения, например, соединение вложенными циклами (англ. inner loops join), соединение хешированием (англ. hash join), соединение слиянием (англ. merge join). Единственное требование состоит в том, чтобы любая реализация логически давала такой же результат, как при применении описанного алгоритма.

SELECT *
FROM
Person
INNER JOIN
City
ON Person.CityId = City.Id
———————————————————————————
OUTER JOIN
Соединение двух таблиц, в результат которого обязательно входят все строки либо одной, либо обеих таблиц.
———————————————————————————
LEFT JOIN
Оператор левого внешнего соединения LEFT OUTER JOIN соединяет две таблицы. Порядок таблиц для оператора важен, поскольку оператор не является коммутативным.

Заголовок таблицы-результата является объединением (конкатенацией) заголовков соединяемых таблиц.

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

В результат включается внутреннее соединение (INNER JOIN) левой и правой таблиц по предикату p.
Затем в результат добавляются те строки левой таблицы, которые не вошли во внутреннее соединение на шаге 1. Для таких строк столбцы, соответствующие правой таблице, заполняются значениями NULL.
SELECT *
FROM
Person – Левая таблица
LEFT JOIN
City – Правая таблица
ON Person.CityId = City.Id
———————————————————————————
RIGHT JOIN
Оператор правого внешнего соединения RIGHT OUTER JOIN соединяет две таблицы. Порядок таблиц для оператора важен, поскольку оператор не является коммутативным.

Заголовок таблицы-результата является объединением (конкатенацией) заголовков соединяемых таблиц.

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

В результат включается внутреннее соединение (INNER JOIN) левой и правой таблиц по предикату p.
Затем в результат добавляются те строки правой таблицы, которые не вошли во внутреннее соединение на шаге 1. Для таких строк столбцы, соответствующие левой таблице, заполняются значениями NULL.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Что такое группировка, как она связана с агрегационной функцией?

A

Предложение GROUP BY используется для определения групп выходных строк, к которым могут применяться агрегатные функции (COUNT, MIN, MAX, AVG и SUM). Если это предложение отсутствует, и используются агрегатные функции, то все столбцы с именами, упомянутыми в SELECT, должны быть включены в агрегатные функции, и эти функции будут применяться ко всему набору строк, которые удовлетворяют предикату запроса. В противном случае все столбцы списка SELECT, не вошедшие в агрегатные функции, должны быть указаны в предложении GROUP BY. В результате чего все выходные строки запроса разбиваются на группы, характеризуемые одинаковыми комбинациями значений в этих столбцах. После чего к каждой группе будут применены агрегатные функции. Следует иметь в виду, что для GROUP BY все значения NULL трактуются как равные, то есть при группировке по полю, содержащему NULL-значения, все такие строки попадут в одну группу.

Если при наличии предложения GROUP BY, в предложении SELECT отсутствуют агрегатные функции, то запрос просто вернет по одной строке из каждой группы. Эту возможность, наряду с ключевым словом DISTINCT, можно использовать для исключения дубликатов строк в результирующем наборе.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Что такое индекс? Для чего он нужен?

A

Индексы – это специальные таблицы, которые могут быть использованы поисковым двигателем базы данных (далее – БД), для ускорения получения данных. Необходимо просто добавить указатель индекса в таблицу. Индекс в БД крайне схож с индексом в конце книги.

Допустим, мы хотим иметь ссылку на все страницы книги, которые касаются определённой темы (например, Наследование в книге по программированию на языке Java). Для этого, мы в первую очередь ссылаемся на индекс, который указан в конце книге и переходим на любую из страниц, которая относится к необходимой теме.

Индекс помогает ускорить запросы на получение данных (SELECT [WHERE]) , но замедляет процесс добавления и изменения записей (INSERT, UPDATE). Индексы могут быть добавлены или удалены без влияния на сами данные.

Для того, чтобы добавить индекс, нам необходимо использовать команду CREATE INDEX, что позволит нам указать имя индекса и определить таблицу и колонку или индекс колонки и определить используется ли индекс по возрастанию или по убыванию.

Индекса также могут быть уникальными, так же, как и констрейнт UNIQUE. В этом случае индекс предотвращает добавление повторяющихся данных в колонку или комбинацию колонок, на которые указывает индекс.
create index indexz on users(id);

Констрейнт INDEX используется для того, чтобы крайне быстро добавлять и получать данные из таблицы. Данный констрейнт может быть создан с использованием как одной, так и или группы колонок в таблице. Когда INDEX создан, для каждой записи указывается ID, прежде, чем выдавать данные.

Правильное использование данного элемента способно крайне повысить производительность при работе с большими базами данных (далее – БД). Но нам нужно быть осторожными при создании индексов.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Как происходит транзакция в Sql ?ACID?

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

как прописывать роли (админ, пользователь) доступа в базах данных?

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly