Базовый курс SQL. Основные понятия или что такое базы данных

Forums:

[к оглавлению]

Для начала определим некоторые основные понятия.

В общем понимании базы данных часто встречаются в нашей обычной жизни. В простейшем виде - это любая таблица с данными.

Пример.
Телефонная книга, прайс, ежедневник, табло в аэропорту

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

Базы данных

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

Иногда термин база данных употребляется в отношении программного обеспечения, управляющего БД, но это не верно. Такое программное обеспечение называется СУБД - система управления базами данных. База данных - это хранилище, создаваемое и управляемое посредством СУБД. Что из себя представляет это хранилище, зависит от конкретной СУБД.

Таблицы

Таблица - структурированный набор данных определённого типа.

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

Каждая таблица имеет название - это её уникальный идентификатор. Никакая другая таблица в данной БД не может иметь такое же имя. В разных БД имена могут повторяться.

Схема базы данных

Схема БД - информация о базе данных в целом, а также о структуре и свойствах её таблиц.

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

Столбцы таблицы и типы данных

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

Пример.
Для таблицы "Телефонная книга" это могут быть "имя", "номер телефона", "примечания".

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

Пример.
Столбцы "имя", "отчество" и "фамилия" вместо "ФИО".

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

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

Подробнее обо всех типах данных вы можете прочитать в Приложении 4.

Типы данных - один из основных источников несовместимости в SQL. Дело в том, что в разных СУБД набор предлагаемых к использованию типов может отличаться, а также разнятся названия одинаковых типов. Это затрудняет переход с одной СУБД на другую. А также об этом следует помнить, если Вы просто используете разные СУБД в разных проектах.

Строки таблицы

Строка - каждая запись в таблице. Если столбцы мы сравнивали с характеристиками объекта, то строка - это полный набор характеристик о конкретном объекте.

Записи или строки?

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

Первичный ключ (Primary key)

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

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

В качестве первичного ключа может выступать любое уникальное значение, если таковое имеется у объектов таблицы или, в случае, если уникальных значений по смыслу нет, это может быть id, искусственно генерируемый СУБД или самим программистом.

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

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

  • две разные строки не могут иметь одинаковое значение первичного ключа
  • значение первичного ключа должно быть заполнено (не может быть NULL)
  • значение первичного ключа не может быть изменено
  • значение первичного ключа нельзя использовать вновь, даже если строка была удалена из таблицы

Создать первичный ключ можно во время формирования таблицы:

CREATE TABLE Teachers
(
  teacher_id          int       NOT NULL PRIMARY KEY,
  teacher_name        char(50)  NOT NULL ,
  teacher_surname     char(50)  NOT NULL ,
  teacher_middle_name char(50)  
);

или после, внося изменения:

ALTER TABLE Teachers ADD PRIMARY KEY (teacher_id);

Наряду с первичным существует не менее важный "внешний ключ".

Внешний ключ (Foreign key)

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

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

Пример.
В нашем вузе учатся студенты. Данные о них хранятся в таблице Students. И есть таблица Grades, содержащия информацию об оценках студентов. Как же понять, какая оценка кому принадлежит? По столбцу student_id в таблице Grades, который обязательно должен соответствовать значению какого-либо первичного ключа из таблицы Students.

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

Внешний ключ можно содать во время формировании таблицы:

CREATE TABLE Grades
(
  grade_id     int   NOT NULL ,
  grade_value  int   NOT NULL ,
  student_id   int   NOT NULL REFERENCES Students (student_id),
  exam_id      int   NOT NULL
);

или после, внося изменения:

ALTER TABLE Grades
ADD CONSTRAINT FK_Grades_Students FOREIGN KEY (student_id) 
REFERENCES Students (student_id);

Внешний ключ обеспечивает сохранность данных

Задача внешних ключей - не только сохранять ссылочную целостность, но и препятствовать потере значимых данных. Например, СУБД выдаст ошибку при попытке удалить данные об учебной группе из таблицы groups, если в базе данных существуют студенты students, обучающиеся в этой группе. Их внешний ключ group_id будет равен первичному ключу группы.

Если всё-таки данные о группе удалить нужно, придётся предварительно "отвязать" от неё всех студентов: заменить их внешние ключи group_id на id других групп или также удалить данные и об этих студентах. Схема выглядит сложной, но на деле это поможет вам сохранить связи, которые могли бы быть потеряны по невнимательности.

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

SQL -- что это такое

SQL (Structured Qoery Language) - это язык структурированных запросов, который был специально разработан для взаимодействия с базами данных.

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

Расширения SQL.

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

Стандарт SQL контролируется комитетом ANSI и называется ANSI SQL. Все основные СУБД, даже те, которые имеют свои расширения, поддерживают ANSI SQL. Расширенные стандарты SQL носят индивидуальные названия (PL-SQL, Transact-SQL и тд). И в данном курсе они не рассматриваются.

Следующая страница. Извлечение данных.
Оглавление.