Вопросы, которые каждый хороший разработчик базы данных /SQL должен иметь возможность ответить

Я проходил через Вопросы, которые каждый хороший разработчик .Net мог уметь отвечать, и был очень впечатлен содержанием и подходом к этому вопросу, и поэтому в том же духе, Я задаю этот вопрос для Database/SQL Developer.

Какие вопросы, на ваш взгляд, должен отвечать хороший программист базы данных/SQL?

Ответ 1

Различные типы JOIN:

  • INNER JOIN
  • ВЛЕВО И ВПРАВО ВЗАИМОДЕЙСТВИЕ
  • ПОЛНОЕ ПРИСОЕДИНЕНИЕ
  • CROSS JOIN

См. Jeff Atwood Визуальное объяснение JOINs

  • Что такое ключ? Ключ кандидата? Первичный ключ? Альтернативный ключ? Внешний ключ?
  • Что такое индекс и как он помогает вашей базе данных?

  • Каковы доступные типы данных и когда использовать какие?

Ответ 2

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

Основы


  • SELECT столбцы из таблицы
  • Агрегаты Часть 1: COUNT, SUM, MAX/MIN
  • Агрегаты Часть 2: DISTINCT, GROUP BY, HAVING

Intermediate


  1. JOIN s, синтаксис ANSI-89 и ANSI-92
  2. UNION vs UNION ALL
  3. NULL обработка: COALESCE и обработка Native Native
  4. Подзапросы: IN, EXISTS и встроенные представления
  5. Подзапросы: коррелированные
  6. WITH Синтаксис: Подзапрос Факторинг /CTE
  7. представления

Дополнительные темы


  • Функции, хранимые процедуры, пакеты
  • Сводные данные: синтаксис CASE и PIVOT
  • Иерархические запросы
  • Курсоры: неявные и явные
  • Триггеры
  • Динамический SQL
  • Материализованные представления
  • Оптимизация запросов: индексы
  • Оптимизация запросов: объяснение планов
  • Оптимизация запросов: профилирование
  • Моделирование данных: нормальные формы, от 1 до 3
  • Моделирование данных: первичный и внешний ключи
  • Моделирование данных: ограничения таблиц
  • Моделирование данных: Link/Corrollary Tables
  • Поиск полного текста
  • XML
  • Уровни изоляции
  • Диаграммы связей сущностей (ERD), логические и физические
  • Сделки: COMMIT, ROLLBACK, Обработка ошибок

Ответ 3

Вот несколько:

  • Что такое нормализация и почему важно?
  • Каковы ситуации, когда вы будет де-нормализовать данные?
  • Что такое транзакция и почему она важно?
  • Что такое ссылочная целостность и почему это важно?
  • Какие шаги предпринять исследовать отчеты о медленной базе данных производительность?

Ответ 4

Что такое SQL-инъекция и как вы ее предотвращаете?

Что такое курсор и когда вы его используете (или нет) и почему?

Ответ 5

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

Эрвин предложил:

"Почему каждый SELECT всегда включает DISTINCT?"

Более подходящий вопрос: если кто-то должен был заявить, что: "каждый SELECT всегда включает DISTINCT"; как бы вы прокомментировали иск?

Если кандидат не может снять иск в огне, они либо:

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

Для записи

  • Предположим, что ваш запрос верен и не возвращает никаких дубликатов, а затем DISTINCT просто заставляет RDBMS проверять ваш результат (нулевое преимущество и много дополнительной обработки).
  • Предположим, что ваш запрос неверен, и возвращает дубликаты, а затем включает в себя DISTINCT просто скрывает проблему (опять же с дополнительной обработкой). Было бы лучше определить проблему и исправить ваш запрос... она будет работать быстрее таким образом.

Ответ 6

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

Ответ 7

В чем разница между кластеризованный индекс и некластерный индекс?

Другой вопрос, который я хотел бы задать, не для конкретного сервера:

Что такое тупик?

Ответ 8

Я бы дал плохо написанный запрос и спросил их, как они будут заниматься настройкой производительности.

Я бы спросил о теории множеств. Если вы не понимаете работу в наборах, вы не можете эффективно запросить реляционную базу данных.

Я бы дал им некоторые примеры курсоров и спросить, как они переписывают их, чтобы сделать их основанными на наборах.

Если в задании участвовали импорт и экспорт, я задавал бы вопросы о SSIS (или других инструментах, задействованных в этом, используемых другими базами данных). Если бы речь шла о написании отчетов, я бы хотел знать, что они понимают агрегаты и группировки (а также Crystal Reports или SSRS или любой другой инструмент, который вы используете).

Я бы спросил разницу в результатах между этими тремя запросами:

select  a.field1
        , a.field2
        , b.field3
from table1 a
join table2 b
    on a.id = b.id
where a.field5 = 'test'
    and b.field3 = 1

select  a.field1
        , a.field2
        , b.field3
from table1 a
left join table2 b
    on a.id = b.id
where a.field5 = 'test'
    and b.field3 = 1

select  a.field1
        , a.field2
        , b.field3
from table1 a
left join table2 b
    on a.id = b.id and b.field3 = 1
where a.field5 = 'test'

Ответ 9

Знание не использовать и ПОЧЕМУ не использовать:

SELECT *

Ответ 10

Интересный вопрос будет включать в себя реляционное разделение или как выразить отношения "для всех", для которых требуются вложенные предложения not exists.

Возникает вопрос: эта ссылка.

Учитывая следующие таблицы, представляющие пилоты, которые могут летать на самолетах и ​​самолетах в ангаре:

create table PilotSkills (
  pilot_name char(15) not null,
  plane_name char(15) not null
)

create table Hangar (
  plane_name char(15) not null
)

Выберите имена пилотов, которые могут летать на каждом самолете в ангаре.

Ответ:

select distinct pilot_name
from PilotSkills as ps1 
where not exists (
  select * from hangar
  where not exists (
    select * from PilotSkills as ps2 where 
      ps1.pilot_name = ps2.pilot_name and 
      ps2.plane_name = hangar.plane_name
  )
)

Или...

Выберите всех пользователей, которые приняли ответы на вопросы, помеченные 10 самых популярных языков программирования.

Ответ (возможно) (при условии представления Accepted_Answers и таблицы Target_Language_Tags с нужными тегами):

select distinct u.user_name
from Users as u
join Accepted_Answers as a1 on u.user_id = a1.user_id
where not exists (
  select * from Target_Language_Tags t
  where not exists (
    select * 
      from Accepted_Answers as a2
      join Questions as q on a2.question_id = q.question_id
      join Question_Tags as qt on qt.question_id = q.question_id 
    where 
      qt.tag_name = t.tag_name and
      a1.user_id = a2.user_id
  )
)

Ответ 11

Зачем нам нанимать вас, когда у нас есть сложное приложение, используя правильно оптимизированную ORM и внедряющие системы кеширования, такие как memcached?

Это серьезный вопрос, он должен уметь оправдывать свое существование. Как Джефф Этвуд любит говорить "" Оборудование дешево, программисты дорогие"

Ответ 12

Сравните и сравните различия между решением sql/rdbms и решением nosql. Вы не можете претендовать на то, чтобы быть экспертом в любой технологии, не зная ее сильных и слабых сторон по сравнению с ее конкурентами.

Ответ 13

Приведите пример, где предпочтительна деномализация.

(Мне нравится этот, потому что люди приходят из колледжа, стремясь положить все в 3-ю нормальную форму)

Ответ 14

  • Какие типы баз данных причинили вам, как разработчику, больше проблем для понимания и отладки? Ожидаемый ответ, IMHO, опыт работы с проблемами, использующими разные типы даты/времени и BLOB.

  • Когда удобно использовать растровые индексы?

Ответ 15

Что explain plan делает и как интерпретировать полученные вами результаты.

Ответ 16

  • Как вы обнаруживаете и разрешаете проблемы concurrency на уровне приложения?
  • Какие блокирующие парадигмы обычно доступны, и обсуждают их плюсы и минусы.
  • Обсудите значения NULL и связанные с ними проблемы.
  • Какова самая большая система баз данных, с которой вы работали: # таблицы, # строки, # пользователей.

Также задаются следующие вопросы, относящиеся к конкретной платформе (SQL Server):

  • Обсудите столбцы IDENTITY.
  • Каков тип данных timestamp, используемый для?

Ответ 17

Приложение используется 24 часа в сутки. Ваше окно обслуживания/обновления составляет 2 часа в месяц, как вы планируете минимизировать сбой?

Ответ 18

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

Вопрос: как бы вы описали базу данных вашему 5-летнему ребенку?

Ответ 19

  • Объясните разницу между внутреннее и внешнее соединение.
  • Что такое декартово произведение?
  • Объясните третью нормальную форму

Ответ 20

  • Объяснить возможные ограничения для таблиц
  • Объяснить взгляды (и материализованные)
  • Объяснить последовательности
  • Объяснить триггеры

Ответ 21

  • Каковы недостатки использования SQL-запросов adhoc/on-fly и что вы будете делать вместо этого?

Эта область может оказать огромное влияние на производительность и безопасность db. Получите это неправильно, и вы можете оказаться в мире боли.

  • В каких ситуациях вы будете использовать SQL-запросы adhoc/on-fly?

Потому что всегда существует исключение из правила:)

Ответ 22

"Почему каждый SELECT всегда включает DISTINCT?"