1622 просмотра
От 4 июня

Ответы на вопросы с собеседований по БД и SQL

1

Какие есть типы связей таблиц?

Базы данных могут содержать таблицы, которые связаны между собой различными связями. Связь (relationship) представляет ассоциацию между сущностями разных типов. При выделении связи выделяют главную или родительскую таблицу (primary key table / master table) и зависимую, дочернюю таблицу (foreign key table / child table). Дочерняя таблица зависит от родительской. Для организации связи используются внешние ключи. Внешний ключ представляет один или несколько столбцов из одной таблицы, который одновременно является потенциальным ключом из другой таблицы. Внешний ключ необязательно должен соответствовать первичному ключу из главной таблицы. Хотя, как правило, внешний ключ из зависимой таблицы указывает на первичный ключ из главной таблицы. Связи между таблицами бывают следующих типов: - Один к одному (One to one) - Один к многим (One to many) - Многие ко многим (Many to many)

2

Что такое связь "один к одному"?

Данный тип связей встречается не часто. В этом случае объекту одной сущности можно сопоставить только один объект другой сущности. Например, на некоторых сайтах пользователь может иметь только один блог. То есть возникает отношение один пользователь - один блог. Нередко этот тип связей предполагает разбиение одной большой таблицы на несколько маленьких. Основная родительская таблица в этом случае продолжает содержать часто используемые данные, а дочерняя зависимая таблица обычно хранит данные, которые используются реже. В этом отношении первичный ключ зависимой таблицы в то же время является внешним ключом, который ссылается на первичный ключ из главной таблицы. Например, таблица Users представляет пользователей и имеет следующие столбцы: - UserId (идентификатор, первичный ключ) - Name (имя пользователя) И таблица Blogs представляет блоги пользователей и имеет следующие столбцы: - BlogId (идентификатор, первичный и внешний ключ) - Name (название блога) В этом случае столбец BlogId будет хранить значение из столбца UserId из таблицы пользователей. То есть столбец BlogId будет выступать одновременно первичным и внешним ключом.

3

Что такое связь "один ко многим"?

Это наиболее часто встречаемый тип связей. В этом типе связей несколько строк из дочерний таблицы зависят от одной строки в родительской таблице. Например, в одном блоге может быть несколько статей. В этом случае таблица блогов является родительской, а таблица статей - дочерней. То есть один блог - много статей. Или другой пример, в футбольной команде может играть несколько футболистов. И в то же время один футболист одновременно может играть только в одной команде. То есть одна команда - много футболистов. К примеру, пусть будет таблица Articles, которая представляет статьи блога и которая имеет следующие столбцы: - ArticleId (идентификатор, первичный ключ) - BlogId (внешний ключ) - Title (название статьи) - Text (текст статьи) В этом случае столбец BlogId из таблицы статей будет хранить значение из столбца BlogId из таблицы блогов.

4

Что такое связь "многие ко многим"?

При этом типе связей одна строка из таблицы А может быть связана с множеством строк из таблицы В. В свою очередь одна строка из таблицы В может быть связана с множеством строк из таблицы А. Типичный пример - студенты и курсы: один студент может посещать несколько курсов, и соответственно на один курс могут записаться несколько студентов. Другой пример - статьи и теги: для одной статьи можно определить несколько тегов, а один тег может быть определен для нескольких статей. Но на уровне базы данных мы не можем установить прямую связь многие ко многим между двумя таблицами. Это делается посредством вспомогательной промежуточной таблицы. Иногда данные из этой промежуточной таблицы представляют отдельную сущность. Например, в случае со статьями и тегами пусть будет таблица Tags, которая имеет два столбца: - TagId (идентификатор, первичный ключ) - Text (текст тега) Также пусть будет промежуточная таблица ArticleTags со следующими полями: - TagId (идентификатор, первичный и внешний ключ) - ArticleIdId (идентификатор, первичный и внешний ключ) Технически мы получим две связи один-ко-многим. Столбец TagId из таблицы ArticleTags будет ссылаться на столбец TagId из таблицы Tags. А столбец ArticleId из таблицы ArticleTags будет ссылаться на столбец ArticleId из таблицы Articles. То есть столбцы TagId и ArticleId в таблице ArticleTags представляют составной первичный ключ и одновременно являются внешними ключами для связи с таблицами Articles и Tags.

5

Что такое ссылочная целостность данных?

При изменении первичных и внешних ключей следует соблюдать такой аспект как ссылочная целостность данных (referential integrity). Ее основная идея состоит в том, чтобы две таблице в базе данных, которые хранят одни и те же данные, поддерживали их согласованность. Целостность данных представляет правильно выстроенные отношения между таблицами с корректной установкой ссылок между ними. В каких случаях целостность данных может нарушаться: - Аномалия удаления (deletion anomaly). Возникает при удалении строки из главной таблицы. В этом случае внешний ключ из зависимой таблицы продолжает ссылаться на удаленную строку из главной таблицы - Аномалия вставки (insertion anomaly). Возникает при вставке строки в зависимую таблицу. В этом случае внешний ключ из зависимой таблицы не соответствует первичному ключу ни одной из строк из главной таблицы. - Аномалии обновления (update anomaly). При подобной аномалии несколько строк одной таблицы могут содержать данные, которые принадлежат одному и тому же объекту. При изменении данных в одной строке они могу прийти в противоречие с данными из другой строки. Аномалия удаления Для решения аномалии удаления для внешнего ключа следует устанавливать одно из двух ограничений: Если строка из зависимой таблицы обязательно требует наличия строки из главной таблицы, то для внешнего ключа устанавливается каскадное удаление. То есть при удалении строки из главной таблицы происходит удаление связанной строки (строк) из зависимой таблицы. Если строка из зависимой таблицы допускает отсутствие связи со строкой из главной таблицы (то есть такая связь необязательна), то для внешнего ключа при удалении связанной строки из главной таблицы задается установка значения NULL. При этом столбец внешнего ключа должен допускать значение NULL. Аномалия вставки Для решения аномалии вставки при добавлении в зависимую таблицу данных столбец, который представляет внешний ключ, должен допускать значение NULL. И таким образом, если добавляемый объект не имеет связи с главной таблицей, то в столбце внешнего ключа будет стоять значение NULL. Аномалии обновления Для решения проблемы аномалии обновления применяется нормализация, которая будет рассмотрена далее.

6

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

Нормализация представляет процесс разделения данных по отдельным связанным таблицам. Нормализация устраняет избыточность данных (data redundancy) и тем самым позволяет избежать нарушения целостности данных при их изменении, то есть избежать аномалий изменения (update anomaly). По правилам нормализации есть семь нормальных форм баз данных: - первая - вторая - третья - нормальная форма Бойса-Кодда - четвёртая - пятая - шестая. Приводить данные к нормальным формам можно только последовательно. То есть в базе данных второй нормальной формы данные по умолчанию уже должны быть нормализованы по правилам первой нормальной формы и так далее. В итоге база данных в шестой нормальной форме — идеально нормализованная. В некоторых случаях попытка нормализовать данные до «идеального» состояния может привести к созданию множества таблиц, ключей и связей. Это усложнит работу с базой и снизит производительность СУБД. Поэтому обычно данные нормализуют до третьей нормальной формы.

7

Что такое первая нормальная форма?

В базе данных не должно быть дубликатов и составных данных. Элементы составных данных лучше разнести по разным полям, иначе в процессе работы с данными могут появиться ошибки и аномалии. Например, отдел маркетинга решил поздравить всех Александров с именинами и сделать рассылку с промокодом. Если таблица соответствует первой нормальной форме, можно найти нужные данные без дополнительных действий. Когда имя, отчество и фамилия записаны в одно поле, при поиске и сортировке в выборку попадут, например, Александровичи, Александровны и Александровы. Другой пример — адреса. Их тоже лучше приводить к первой нормальной форме. То есть город, район, улицу, номер дом и номер квартиры записывать в отдельные поля. Если какие-то данные дублируются, как в случае с именами и фамилиями постоянных покупателей, их нужно перенести в другую таблицу.

8

Что такое вторая нормальная форма?

Если упростить: у каждой записи в базе данных должен быть первичный ключ. Первичный ключ — это элемент записи, который не повторяется в других записях. Допустим, 10 декабря покупатель Егор Кузнецов купил цельнозерновой хлеб за 75 рублей в сетевом магазине продуктов города Москвы. Запись о его покупке появилась в базе данных. Нельзя исключать, что другой Егор Кузнецов в этот день купит такой же товар в другом магазине сети. Запись о покупке тоже появится в базе. Чтобы записи не перепутались, можно добавить к ним идентификатор покупки, например номер чека. Идентификатор покупки — это первичный ключ.

9

Что такое третья нормальная форма?

Требование третьей нормальной формы заключается в том, чтобы в таблицах отсутствовала транзитивная зависимость. Транзитивная зависимость – это когда неключевые столбцы зависят от значений других неключевых столбцов. Проще всего это объяснить на примере. Представьте таблицу с тремя столбцами: - модель автомобиля - название магазина (где авто продается) - номер телефона магазина Такая таблица не соответствует третьей нормальной форме, поскольку третий столбец (номер телефона) как раз-таки зависит от второго столбца (название магазина), который является неключевым. Для того, чтобы нормализовать таблицу до 3нф, мы должны оставить в ней только первые два столбца, а номер телефона хранить в отдельной таблице со столбцами: - название магазина - номер телефона магазина

10

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

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

Логотип ДевстанцииАвторизуйтесь, чтобы просматривать следующий контент
12

Что такое транзакции?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
13

Какие есть уровни изоляции транзакций?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
14

В чем разница между транзакцией и batch?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
15

Какие есть уровни изолированности транзакций?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
16

Что такое индексы в теории баз данных?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
17

Какие есть типы индексов?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
18

Что такое первичный ключ?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
19

Что такое внешний ключ?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
20

В чем разница между базой данных и схемой?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
21

Что такое временые таблицы?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
22

Что такое SQL?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
23

Какие существуют типы данных в SQL?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
24

В чем разница между CHAR и VARCHAR?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
25

Что такое self-join?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
26

Что такое ограничения в SQL?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
27

Что такое псевдонимы в SQL?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
28

Что такое параллелизм в SQL?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
29

Зачем нужен оператор GROUP BY?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
30

Зачем нужен оператор ORDER BY?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
31

Из каких групп оператов состоит SQL?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
32

Что такое внутренний и внешний JOIN?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
33

Что такое коррелированные и некоррелированные подзапросы?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
34

Что такое обобщенное табличное выражение (CTE)?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
35

Зачем нужны операторы DELETE и TRUNCATE?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
36

Зачем нужны операторы HAVING и WHERE?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
37

Зачем нужен оператор UNION?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
38

Зачем нужен оператор CASE?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
39

Что делает операция MERGE в SQL?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
40

Какова роль ключевого слова WITH в SQL?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
41

В чем разница между операторами BETWEEN и IN?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
42

Что такое хранимая процедура?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
43

Какие бывают типы функций в SQL?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
44

В чем разница между функцией и хранимой процедурой?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
45

Что такое оконная функция?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
46

В чем разница между RANK, DENSE_RANK и ROW_NUMBER?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
47

Что такое скалярные и табличные функции?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
48

Какие операции и функции для работы с символами вы знаете?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
49

Как работает оптимизатор SQL-запросов?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
50

Что такое SQL-представление?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
51

Какие бывают виды представлений в SQL?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
52

В чем разница между представлением и таблицей?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
53

Что такое триггер?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
54

Что такое вложенный триггер

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
55

Какие есть стратегии резервного копирования и восстановления БД?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
56

Что такое T-SQL?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
57

Что такое ETL (Extract, Transform, Load) в контексте баз данных?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
58

Что такое динамический SQL?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
59

Что такое блокировка?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
60

Какие есть типы блокировок?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
61

В чем разница между блокировкой и deadlock?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
Хотите стать частью сообщества Девстанции?
Вступайте в наш чат в Telegram

Также в этой категории

Вопросник
  10 вопросов

Всё о репликации баз данных

Описание понятий и процессов репликации БД

1008 просмотров
От 8 октября 2023
Вопросник
  11 вопросов

Теория шардинга баз данных

О распределении данных между серверами

926 просмотров
От 10 октября 2023

Вам может быть интересно

Викторина
  20 вопросов

Викторина по Django - Junior/Middle

Базовые вопросы с собеседования по Django

67 просмотров
От 2 июня 2023
Вопросник
  13 вопросов

Общие принципы и понятия ООП

Вопросы для собеседования по теме ООП

878 просмотров
От 7 октября 2023
Вопросник
  11 вопросов

Вопросы про HTTP, SSL, WebSocket и прочее

Вопросы для собеседования бэкенд-разработчика

1090 просмотров
От 12 октября 2023
Вопросник
  15 вопросов

Вопросы с собеседований по DDD

Ответы на вопросы про Domain-Driven Design

1043 просмотра
От 4 июня
Вопросник
  12 вопросов

Операционные системы: базовые понятия

Потоки, процессы, конкурентность и прочие понятия из мира ОС

827 просмотров
От 27 января
Викторина
  12 вопросов

Викторина по Python - Middle/Senior

Продвинутые вопросы для собеседования Python-разработчика

123 просмотра
От 30 мая 2023

Топ тредов

Gravatar for 1847arsen
Arsen
: Задача в Python под названием "Кратчайший путь в матрице"

Последнее сообщение:
Gravatar for 1847arsen
Arsen
: Ошибка на 3 тесте # Ожидаемый результат: 2 а должен быть 1
1 сообщение
30 просмотров

Gravatar for 1233freddypopa
freddypopa
: Добавить чекбокс, который отвечает за показ ранее тронутых задач (черновик)

Последнее сообщение:
: Отличная идея! Возьмём её на заметку!
1 сообщение
125 просмотров

: Предложите идею и получите спонсорский доступ на месяц

Последнее сообщение:
Gravatar for 1236borisops
Borisops
: Добавить темную тему) что бы можно было посмотреть сложность алгоритма и добавить тэги.
10 сообщений
341 просмотр

Все категории