Собеседование SQL Flashcards

1
Q

Что такое первичный ключ? Для чего он нужен?

A

Первичный ключ в базе данных - это столбец или набор столбцов, которые уникально идентифицируют каждую строку в таблице. Он является основным механизмом для связи таблиц между собой.

Первичный ключ должен удовлетворять следующим требованиям:

  • Уникальность: значение первичного ключа должно быть уникальным для каждой строки в таблице.
  • Неизменность: значение первичного ключа не должно изменяться после его назначения. Технически это возможно, однако может привести к ошибкам.
  • Непустота: значение первичного ключа не может быть NULL.

Первичный ключ используется для:
* Обеспечения целостности базы данных: первичный ключ гарантирует, что каждая строка в таблице уникальна, что предотвращает дублирование данных.
* Обеспечения связи между таблицами: первичный ключ может быть использован в качестве внешнего ключа в другой таблице, чтобы связать две таблицы вместе.
* Ускорения поиска данных: первичный ключ обычно индексируется, что ускоряет поиск конкретной строки в таблице.
* Кроме того, первичный ключ также может использоваться для упорядочивания данных в таблице, что может быть полезно при выполнении операций сортировки и фильтрации.

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

Сколько может быть первичных ключей у таблицы?

A

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

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

Что такое “составной первичный ключ”? В каких случаях он может быть необходим?

A

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

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

Составной первичный ключ может быть необходим в следующих случаях:

  • Для обеспечения уникальности записей в таблице, когда один столбец не может гарантировать уникальность.
  • Для связи таблиц между собой, когда для связи требуется использовать несколько столбцов.
  • Для упорядочивания данных в таблице по нескольким столбцам.
  • Для оптимизации запросов, когда часто используются несколько столбцов в качестве критерия поиска.
  • Этот вид ключей отлично подходит для структурирования связей “многие ко многим” в базах данных.
    При использовании составного первичного ключа необходимо учитывать, что все компоненты ключа должны удовлетворять тем же требованиям, что и обычный первичный ключ: уникальность, неизменность и непустота. Кроме того, при создании составного первичного ключа необходимо определить порядок следования компонентов ключа, который будет использоваться при упорядочивании данных в таблице.
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

“Составное ограничение уникальности” в базах данных означает, что уникальность определяется не одним столбцом, а комбинацией нескольких столбцов. Это означает, что сочетание значений в этих столбцах должно быть уникальным для каждой строки в таблице.

Например, если у нас есть таблица “students” с столбцами “first_name” и “last_name”, мы можем создать составное ограничение уникальности для этих двух столбцов. Это означает, что не может быть двух студентов с одинаковыми именем и фамилией. Однако могут быть два студента с одинаковым именем или одинаковой фамилией, пока комбинация имя-фамилия уникальна.

Составное ограничение уникальности может быть необходимо в следующих случаях:

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

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

Что такое внешний ключ? Для чего он нужен?

A

Внешний ключ (Foreign Key) в базе данных - это столбец или набор столбцов, которые используются для установления связи между двумя таблицами. Внешний ключ указывает на первичный ключ другой таблицы, иногда называемой родительской таблицей, в то время как таблица, содержащая внешний ключ, называется дочерней таблицей.

Внешний ключ нужен для следующих целей:

  • Установление связи между таблицами: Внешние ключи позволяют связать записи в двух разных таблицах, создав отношение “один ко многим” или “многие ко многим”. Это позволяет создавать более сложные и гибкие структуры данных.
  • Гарантия целостности данных: Внешний ключ гарантирует, что в дочерней таблице не будет записей, которые ссылаются на несуществующие записи в родительской таблице. Это называется целостностью внешнего ключа.
  • Обеспечение каскадного удаления или обновления: Внешний ключ может быть настроен таким образом, чтобы при удалении или обновлении записи в родительской таблице автоматически удалялись или обновлялись связанные с ней записи в дочерней таблице. Это называется каскадным удалением или обновлением.
    Например, если у нас есть таблица “orders” (заказы) и таблица “customers” (клиенты), мы можем создать внешний ключ в таблице “orders”, который ссылается на первичный ключ таблицы “customers”. Это позволит нам связать каждый заказ с конкретным клиентом и гарантировать, что не будет заказов, которые ссылаются на несуществующих клиентов.

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

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

Что такое индекс и для чего он нужен? В каком случае целесообразно использовать индексы?

A

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

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

Индексы используются для увеличения производительности БД.
Кластеризованные индексы сортируют и хранят строки данных в таблицах или представлениях на основе их ключевых значений. Эти ключевые значения — это столбцы, включенные в определение индекса. Существует только один кластеризованный индекс для каждой таблицы, так как строки данных могут храниться в единственном порядке.
Некластеризованные индексы имеют структуру, отдельную от строк данных. В некластеризованном индексе содержатся значения ключа некластеризованного индекса, и каждая запись значения ключа содержит указатель на строку данных, содержащую значение ключа.
Указатель из строки индекса в некластеризованном индексе, который указывает на строку данных, называется указателем строки. Структура указателя строки зависит от того, хранятся ли страницы данных в куче или в кластеризованной таблице. Для кучи указатель строки является указателем на строку. Для кластеризованной таблицы указатель строки данных является ключом кластеризованного индекса.

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

Какие виды join-ов существуют? Чем отличается inner join от left join?

A

Существует несколько видов соединений (join) таблиц в SQL:

INNER JOIN (внутреннее соединение) - возвращает только те записи, у которых есть соответствия в обеих таблицах.
LEFT JOIN (левое внешнее соединение) - возвращает все записи из левой таблицы и соответствующие им записи из правой таблицы. Если для какой-либо записи левой таблицы нет соответствия в правой таблице, то в результате будут возвращены NULL-значения.
RIGHT JOIN (правое внешнее соединение) - аналогично LEFT JOIN, но возвращает все записи из правой таблицы и соответствующие им записи из левой таблицы.
FULL OUTER JOIN (полное внешнее соединение) - возвращает все записи из обеих таблиц, включая те, для которых нет соответствий в другой таблице. Если для какой-либо записи нет соответствия в другой таблице, то в результате будут возвращены NULL-значения.
Основное отличие INNER JOIN от LEFT JOIN заключается в том, что INNER JOIN возвращает только те записи, у которых есть соответствия в обеих таблицах, а LEFT JOIN возвращает все записи из левой таблицы и соответствующие им записи из правой таблицы, даже если для них нет соответствий в правой таблице.

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

Что такое представление? Как представление может использоваться в проекте?

A

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

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

В проекте представления могут использоваться следующими способами:

Упрощение сложных запросов: Представления могут быть созданы для упрощения сложных запросов, которые часто используются в проекте. Это позволяет разработчикам работать с более простыми и понятными запросами, а также уменьшает вероятность ошибок.

Безопасность и контроль доступа: Представления могут быть использованы для предоставления пользователям доступа только к определенным данным, не раскрывая им всю структуру базы данных. Это позволяет обеспечить безопасность и контролировать доступ к данным.

Сокрытие структуры базы данных: Представления могут скрывать сложную структуру базы данных, предоставляя пользователям более простой и понятный интерфейс для работы с данными.

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

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

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

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

Чем отличается функция от хранимой процедуры?

A

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

Функции Хранимые процедуры
Функция имеет возвращаемый тип и возвращает значение Хранимая процедура не имеет возвращаемого типа, но имеет выходные аргументы
Использование DML (insert, update, delete) запросов внутри функции невозможно. В функциях разрешены только SELECT-запросы Использование DML-запросов (insert, update, delete) возможно в хранимой процедуре.
Функция не имеет выходных аргументов Хранимая процедура имеет и входные, и выходные аргументы
Вызов хранимой процедуры из функции невозможно Использование или же управление транзакциями возможно в хранимой процедуре
Вызов функции внутри SELECT запросов возможен Вызов хранимой процедуры из SELECT запросов невозможно.
Хранимая процедура должна быть вызвана с помощью инструкции CALL.

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

Что такое триггер? Какие виды бывают? Для чего используются?

A

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

В зависимости от события, которое вызывает триггер, они подразделяются на следующие виды:

Триггеры входа вызывают срабатывание хранимых процедур в ответ на событие LOGON. Это событие возникает при установке сеанса пользователя с экземпляром SQL Server.
Триггеры DDL активируются в ответ на различные события языка DDL. Эти события в основном соответствуют инструкциям Transact-SQL, начинающимся с ключевых слов CREATE, ALTER, DROP, GRANT, DENY, REVOKE или UPDATE STATISTICS. Системные хранимые процедуры, выполняющие операции, подобные операциям DDL, также могут запускать триггеры DDL.
Триггеры DML — это хранимые процедуры особого типа, автоматически вступающие в силу, если происходит событие языка обработки данных DML, которое затрагивает таблицу или представление, определенное в триггере. События DML включают инструкции INSERT, UPDATE или DELETE. Триггеры DML можно использовать для применения бизнес-правил и целостности данных, запроса других таблиц и включения сложных инструкций Transact-SQL. Триггер и инструкция, при выполнении которой он срабатывает, считаются одной транзакцией, которую можно откатить назад внутри триггера. При обнаружении серьезной ошибки (например, нехватки места на диске) вся транзакция автоматически откатывается назад.

Триггеры могут быть также классифицированы по времени выполнения:

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

Проверки вводимых данных на соответствие определенным правилам.
Обновления связанных таблиц при изменении данных в основной таблице.
Записи данных в журнал для отслеживания изменений в базе данных.
Реализации бизнес-правил, таких как автоматическое расчет стоимости заказа на основе количества и цены товаров.
Таким образом, триггеры в SQL являются мощным инструментом для поддержания целостности данных и автоматизации повторяющихся действий в базе данных.

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

В чем отличие ХП от триггера?

A

Хранимая процедура (ХП) и триггер - это два разных вида объектов базы данных, которые используются для выполнения различных задач.

Основное отличие ХП от триггера заключается в том, что ХП вызывается явно, в то время как триггер вызывается автоматически в ответ на определенные действия с данными в базе данных.

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

Кроме того, ХП может иметь параметры и возвращать значение, в то время как триггер не может иметь параметров и не возвращает значения.

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

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