SQL Server 2012 | Система управления базами данных (СУБД)

58

Работа с базами данных в .NET Framework — SQL Server 2012 — Система управления базами данных (СУБД)

Исходники баз данных

Система управления базами данных (СУБД) — это общий набор различных программных компонентов баз данных и собственно баз данных, содержащий следующие составляющие:

  • прикладные программы баз данных;

  • клиентские компоненты;

  • серверы баз данных;

  • собственно базы данных.

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

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

Возможности СУБД

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

  • разнообразные пользовательские интерфейсы;

  • физическую независимость данных;

  • логическую независимость данных;

  • оптимизацию запросов;

  • целостность данных;

  • управление параллелизмом;

  • резервное копирование и восстановление;

  • безопасность баз данных.

Все эти возможности вкратце описываются в следующих далее разделах.

Разнообразные пользовательские интерфейсы

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

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

Физическая независимость данных

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

Например, если данные были сначала упорядочены по одному критерию, а потом этот порядок был изменен по другому критерию, изменение физических данных не должно влиять на существующие приложения баз данных или ее схему (описание базы данных, созданное языком определения данных системы базы данных).

Логическая независимость данных

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

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

Оптимизация запросов

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

Целостность данных

Одной из стоящих перед системой баз данных задач является идентифицировать логически противоречивые данные и не допустить их помещения в базу данных. (Примером таких данных будет дата «30 февраля» или время «5:77:00».) Кроме этого, для большинства реальных задач, которые реализовываются с помощью систем баз данных, существуют ограничения для обеспечения целостности (integrity constraints), которые должны выполняться для данных. (В качестве примера ограничения для обеспечения целостности можно назвать требование, чтобы табельный номер сотрудника был пятизначным целым числом.)

Обеспечение целостности данных может осуществляться пользователем в прикладной программе или же системой управления базами данных. До максимально возможной степени эта задача должна осуществляться посредством СУБД.

Управление параллелизмом

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

  1. На общем банковском счете № 3811 в банке X имеется $1500.

  2. Владельцы этого счета, госпожа А и господин Б, идут в разные отделения банка и одновременно снимают со счета по $750 каждый.

  3. Сумма, оставшаяся на счету № 3811 после этих транзакций, должна быть $0, и ни в коем случае не $750.

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

Резервное копирование и восстановление

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

Безопасность баз данных

Наиболее важными понятиями безопасности баз данных являются аутентификация и авторизация. Аутентификация — это процесс проверки подлинности учетных данных пользователя, чтобы не допустить использования системы несанкционированными пользователями. Аутентификация наиболее часто реализуется, требуя, чтобы пользователь вводил свое имя пользователя и пароль. Система проверяет достоверность этой информации, чтобы решить, имеет ли данный пользователь право входа в систему или нет. Этот процесс можно усилить применением шифрования.

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

Системы реляционных баз данных

Компонент Database Engine сервера Microsoft SQL Server является системой реляционных баз данных. Понятие систем реляционных баз данных было впервые введено в 1970 г. Эдгаром Ф. Коддом в статье «A Relational Model of Data for Large Shared Data Banks». В отличие от предшествующих систем баз данных (сетевых и иерархических), реляционные системы баз данных основаны на реляционной модели данных, обладающей мощной математической теорией.

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

Работа с демонстрационной базой данных в последующих статьях

Используемая в наших статьях база данных SampleDb представляет некую компанию, состоящую из отделов (department) и сотрудников (employee). Каждый сотрудник принадлежит только одному отделу, а отдел может содержать одного или нескольких сотрудников. Сотрудники работают над проектами (project): в любое время каждый сотрудник занят одновременно в одном или нескольких проектах, а над каждым проектом может работать один или несколько сотрудников.

Эта информация представлена в базе данных SampleDb (находится в исходниках) посредством четырех таблиц:

Department

Employee

Project

Works_on

Организация этих таблиц показана на рисунках ниже. Таблица Department представляет все отделы компании. Каждый отдел обладает следующими атрибутами (столбцами):

Department (Number, DepartmentName, Location)

Атрибут Number представляет однозначный номер каждого отдела, атрибут DepartmentName — его название, а атрибут Location — расположение. Таблица Employee представляет всех работающих в компании сотрудников. Каждый сотрудник обладает следующими атрибутами (столбцами):

Employee (Id, FirstName, LastName, DepartmentNumber)

Атрибут Id представляет однозначный табельный номер каждого сотрудника, атрибуты FirstName и LastName — имя и фамилию сотрудника соответственно, а атрибут DepartmentNumber — номер отдела, в котором работает сотрудник.

Все проекты компании представлены в таблице проектов Project, состоящей из следующих столбцов (атрибутов):

Project (ProjectNumber, ProjectName, Budget)

В столбце ProjectNumber указывается однозначный номер проекта, а в столбцах ProjectName и Budget — название и бюджет проекта соответственно.

В таблице Works_on указывается связь между сотрудниками и проектами:

Works_on (EmpId, ProjectNumber, Job, EnterDate)

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

На примере базы данных SampleDb можно описать некоторые основные свойства реляционных систем баз данных:

  • Строки таблицы не организованы в каком-либо определенном порядке.

  • Также не организованы в каком-либо определенном порядке столбцы таблицы.

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

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

  • Каждая таблица содержит, по крайней мере, один столбец, значения которого определяют такое свойство, что никакие две строки не содержат одинаковой комбинации значений для всех столбцов таблицы. В реляционной модели данных такой столбец называться потенциальным ключом (candidate key). Если таблица содержит несколько потенциальных ключей, разработчик указывает один из них, как

    первичный ключ (primary key) данной таблицы. Например, первичным ключом таблицы Department будет столбец Number, а первичными ключами таблиц Employee будет Id. Наконец, первичным ключом таблицы Works_on будет комбинация столбцов EmpId и ProjectNumber.

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

SQL — язык реляционной базы данных

Язык реляционной базы данных в системе SQL Server называется Transact-SQL. Это разновидность самого значимого на сегодняшний день языка базы данных — языка SQL (Structured Query Language — язык структурированных запросов). Происхождение языка SQL тесно связано с проектом, называемым System R, разработанным и реализованным компанией IBM еще в начале 80-х годов прошлого столетия. Посредством этого проекта было продемонстрировано, что, используя теоретические основы работы Эдгара Ф. Кодда, возможно создание системы реляционных баз данных.

В отличие от традиционных языков программирования, таких как C#, C++ и Java, язык SQL является множество-ориентированным (set-oriented). Разработчики языка также называют его запись-ориентированным (record-oriented). Это означает, что в языке SQL можно запрашивать данные из нескольких строк одной или нескольких таблиц, используя всего лишь одну инструкцию. Это одно из наиболее важных преимуществ языка SQL, позволяющее использовать этот язык на логически более высоком уровне, чем традиционные языки программирования.

Другим важным свойством языка SQL является его непроцедурность. Любая программа, написанная на процедурном языке (C#, C++, Java), пошагово описывает, как выполнять определенную задачу. В противоположность этому, язык SQL, как и любой другой непроцедурный язык, описывает, что хочет пользователь. Таким образом, ответственность за нахождение подходящего способа для удовлетворения запроса пользователя лежит на системе.

Язык SQL содержит два подъязыка: язык описания данных DDL (Data Definition Language) и язык обработки данных DML (Data Manipulation Language). Инструкции языка DDL также применяются для описания схем таблиц баз данных. Язык DDL содержит три общие инструкции SQL: CREATE, ALTER и DROP. Эти инструкции используются для создания, изменения и удаления, соответственно, объектов баз данных, таких как базы данных, таблицы, столбцы и индексы.

В отличие от языка DDL, язык DML охватывает все операции по манипулированию данными. Для манипулирования базами данных всегда применяются четыре общие операции: извлечение, вставка, удаление и модифицирование данных (SELECT, INSERT, DELETE, UPDATE).

Что такое SQL

Язык структурированных запросов (SQL) — это язык программирования, предназначенный для управления и манипулирования базами данных, он используется для поиска и извлечения информации из огромных баз данных. 

SQL отображается в реляционных базах данных, форме базы данных, полученной из реляционной модели Эдгара Ф. Кодда для хранения информации таким образом, чтобы она была доступной и идентифицируемой по отношению к другой информации. Язык изначально назывался SEQUEL (структурированный английский язык запросов) и был разработан Дональдом Чемберлином и Рэймондом Бойсом в IBM (1974 г.) SQL содержит четыре основные категории с двумя дополнительными командами, которые в основном используются для компьютерных баз данных. SQL — это язык четвертого поколения, его команды близки к человеческому языку. А вот языки программирования Java и C ++ — языки третьего поколения, которые абстрактны для неопытного глаза.

Какая структура SQL и как он работает?

SQL стал отраслевым стандартом для манипулирования и запроса данных в реляционной базе данных. Использование языка разбито на компоненты:

1. DML — язык манипулирования данными, используется для управления содержимым базы данных в режимах извлечения, обновления, удаления и вставки. DML имеет четыре команды, которые можно использовать для управления информацией, а именно команды «Выбрать», «Вставить», «Обновить» и «Удалить».

2. DDL — язык определения данных, используется для управления таблицами и структурами индексов. А также с синхронизированными командами, которые можно использовать для создания, изменения и удаления таблиц базы данных.

3. DCL — язык управления данными, часто используется для управления доступом к базе данных, предоставляя права определенным пользователям. Две команды, которые используются в DCL, ето Grant и Revoke — основные команди безопасности реляционной базы данных и аутентификации.

4. DQL — язык запросов данных, он похож на DML, так как он используется для выбора, вставки, обновления и удаления данных из базы данных. 

Другие команды SQL — это команды администрирования данных и управления транзакциями.

Стандарт SQL

Стандарт SQL пережил несколько изменений с первых лет, в основном для добавления новых функций в стандартную структуру. Например, стандарт SQL теперь может поддерживать XML, сопоставление регулярных выражений и многое другое. Сегодня SQL используется в популярных приложениях баз данных в Интернете, таких как Oracle Database. Многие добавленные базы данных, такие как MySQL и PostgreSQL, не реализуют весь стандарт SQL. Вместо этого разработчики добавляют свои собственные разновидности и варианты в стандарт SQL, основными из которых являются IBM, Microsoft и Oracle.

Вариации

В 1989 году Microsoft разработала собственную систему управления реляционными базами данных под названием Microsoft SQL Server. Он был разработан для поддержки ряда приложений для обработки транзакций, бизнес-аналитики и аналитики в ИТ.  Существует несколько версий SQL Server с различными интеграциями инструментов управления данными и аналитики, а также с более новыми технологиями, такими как облачные вычисления и отчеты на мобильных устройствах. Oracle также предоставляет SQL, который можно использовать для доступа, определения и обслуживания данных. Его SQL-сервер может использоваться в сотрудничестве с Oracle, PHP, Java и другими языками программирования.

Хотя SQL может показаться сложным, есть международные как платные, так бесплатные онлайн-курсы, которые могут помочь.

sqlite — Чем отличаются операторы SQL «IS» и «=»?

спросил

12 лет, 3 месяца назад

Изменено 12 лет, 3 месяца назад

Просмотрено 43к раз

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

 SELECT * FROM "Foo" WHERE "Bar"=@param
 

Иногда @param может быть NULL . В таких случаях я хочу, чтобы запрос возвращал записи, где Bar равен NULL , но приведенный выше запрос этого не сделает. Я узнал, что для этого я могу использовать оператор

IS . Другими словами:

 SELECT * FROM "Foo" WHERE "Bar" IS @param
 

Помимо разной обработки NULL , есть ли другие способы, которыми два приведенных выше оператора будут вести себя по-разному? Что если @param не NULL , а, скажем, 5 ? Является ли в этом случае использование оператора IS безопасным (и разумным) решением? Есть ли какой-то другой подход, который я должен использовать?

  • sql
  • sqlite
  • null
  • операторы
  • равенство
1

Вам нужны записи из Foo, где Bar = @param, или если @param имеет значение null, где Bar имеет значение null.

Некоторые из предложенных решений дадут вам нулевые записи с ненулевым @param, что не похоже на ваше требование.

 Выберите * из Foo, где (@param равно null, а Bar равно null) или (Bar = @param)
 

Это не говорит о том, является ли это Oracle, SQL Server или другой СУБД, потому что каждая из них реализует немного разные вспомогательные функции. SQL ISNULL (первый, второй) как NVL (первый, второй). Мне нравится COALESCE() SQL Server за его общую применимость.

Сравнение IS предназначено только для нулевых сравнений.

Если вы используете SQL Server и вам действительно нужна другая таблица логической истинности 3VL для решения вашей проблемы (то есть, если вам нужно, чтобы «NULL=NULL» было «истинным» в какой-то момент в время, а также признать, что это устарело и, за исключением ваших причин, в целом не очень хорошая идея), в вашем кодовом блоке вы можете использовать директиву

SET ANSI_NULLS OFF

Вот BOL на нем: http://msdn.microsoft. com/en-us/library/ms188048.aspx

5

Возможно, вы думаете об этом неправильно. Например, если вы говорите о SQL Server (поскольку это то, что у меня есть), ваш второй пример приведет к синтаксической ошибке. Значение в правой части IS не может быть 5.

Чтобы объяснить, рассмотрите объяснение MSDN этих двух операторов в T-SQL (обратите внимание, что вопросы о «SQL» и о «SQL Server» не обязательно совпадают) .

Оператор равенства (=)

Оператор IS NULL

Обратите внимание на кое-что важное. Там не является оператором «IS» в T-SQL. В частности, существует оператор IS [NOT] NULL , который сравнивает одно выражение с NULL.

Это не то же самое , что и оператор = , который сравнивает два выражения друг с другом и имеет определенное поведение, когда одно или оба выражения оказываются равными NULL!

3

Редактировать: (обновление из OP: это не делает то, что я. Если @param равен 5, я хочу видеть только записи, в которых Bar равен 5. Я хочу видеть записи, в которых Bar равен NULL, если и только если @param равен NULL . Прошу прощения, если мой вопрос не прояснил это.)

В этом случае, я думаю, вы должны попробовать что-то вроде этого:

 SELECT * FROM Foo WHERE Bar=@param OR (Bar IS NULL AND @param IS НУЛЕВОЙ)
 

Предыдущий пост:

Почему бы просто не использовать ИЛИ?

 SELECT * FROM "Foo" WHERE "Bar"=@param OR "Bar" IS NULL
 

В SQL Server можно использовать ISNULL:

 SELECT * FROM "Foo" WHERE ISNULL("Bar",@param)=@param
 
4

Я не знаю, какую версию SQL вы используете, но IS не имеет смысла в контексте, который вы только что описали. Я получаю синтаксическую ошибку, если пытаюсь использовать его так, как вы описали. Почему вы хотите использовать его вместо = в любом случае? Это обычное использование, и разработчики программного обеспечения ожидают найти его.

3

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

Если вы выполняете поиск по нулевому (или не нулевому) значению, лучше всего использовать IS. Я не могу указать техническую причину, но я постоянно использую этот синтаксис.

 SELECT * FROM Table WHERE Поле IS NULL
SELECT * FROM Table WHERE Поле НЕ НУЛЕВОЕ
 
1

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя электронную почту и пароль

Опубликовать как гость

Электронная почта

Обязательно, но не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

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

SQL для анализа данных: Введение в учебник

Этот учебник предназначен для людей, которые хотят отвечать на вопросы с помощью данных. Для многих SQL — это «мясо с картошкой» анализа данных — он используется для доступа, очистки и анализа данных, хранящихся в базах данных. Его очень легко освоить, но он используется крупнейшими мировыми компаниями для решения невероятно сложных задач.

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

В этом уроке мы рассмотрим:

  • Как работает учебник по SQL для анализа данных
  • Что такое SQL?
  • Как произносится SQL?
  • Что такое база данных?
  • Начало работы с учебником по SQL

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

Как работает учебник SQL для анализа данных

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

Примечание. Чтобы начать обучение, вам потребуется учетная запись пользователя Mode. Вы можете зарегистрироваться на сайте mode.com.

Что такое SQL?

SQL (язык структурированных запросов) — это язык программирования, предназначенный для управления данными в реляционной базе данных. Он существует с 1970-х годов и сегодня является наиболее распространенным методом доступа к данным в базах данных. SQL имеет множество функций, которые позволяют пользователям читать, манипулировать и изменять данные. Хотя SQL обычно используется инженерами при разработке программного обеспечения, он также популярен среди аналитиков данных по нескольким причинам:

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

SQL отлично подходит для выполнения типов агрегирования, которые вы обычно выполняете в сводной таблице Excel — суммы, подсчеты, минимальные и максимальные значения и т. д. — но для гораздо больших наборов данных и для нескольких таблиц одновременно.

Как произносится SQL?

Понятия не имею.

Что такое база данных?

Из Википедии: База данных — это организованный набор данных.

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

Если вы использовали Excel, вы уже должны быть знакомы с таблицами — они похожи на электронные таблицы. В таблицах есть строки и столбцы, как и в Excel, но они немного более жесткие. Таблицы базы данных, например, всегда организованы по столбцам, и каждый столбец должен иметь уникальное имя. Чтобы получить представление об этой организации, на изображении ниже показан пример таблицы, содержащей данные о вручении премии «Оскар» 2010 года:

В целом в базах данных таблицы организованы в виде схем. В Mode мы организуем таблицы вокруг пользователей, которые их загружают, поэтому у каждого человека есть своя собственная схема. Схемы определяются именами пользователей, поэтому, если ваше имя пользователя — databass3000, все загружаемые вами таблицы будут храниться в схеме databass3000. Например, если databass3000 загружает таблицу продаж рыбных кормов под названием fish_food_sales , эта таблица будет называться databass3000.fish_food_sales . Вы заметите, что все таблицы, используемые в этой серии руководств, имеют префикс «tutorial». Это потому, что они были загружены учетной записью с таким именем пользователя.