2.1.1. Таблицы 2.1.1.1. Основные свойства и характеристики таблиц


Таблица (table) содержит произвольное количество строк (row) или, что то же самое, записей (record). На самом деле максимальное количество строк в таблице ограничивается объемом внешней памяти, доступной для хранения данных базы данных. Разумеется, таблица может быть и пустой, т. е. не содержать ни одной строки.

Все строки одной таблицы имеют одинаковую структуру. Они состоят из столбцов (column). Столбцы иногда называют полями (field). Таблица должна содержать как минимум один столбец.

Данные из таблицы выбираются при помощи оператора SELECT. Как правило, выбираются не все строки таблицы, а только те, которые соответствуют условию, заданному в этом операторе. На содержательном уровне это те данные из таблицы, которые реально нужны пользователю для решения им конкретной задачи предметной области. При помощи оператора SELECT мы можем выбирать данные не только из одной таблицы, но и из нескольких таблиц, используя операцию соединения (join).
Результат выборки называется набором данных (dataset).

Типы данных

Основной характеристикой столбца является его тип данных (datatype). Каждый тип данных в SQL имеет имя. Типы данных могут быть предварительно определенными в системе (predefined), их иногда называют системными, встроенными или базовыми типами данных. Это также могут быть данные, определенные пользователем (user-defined). В некоторых системах есть еще один термин для пользовательских типов данных — домен (domain).

Типы данныхчисловые (целочисленные, дробные с фиксированной точкой и числа с плавающей точкой), строковые, логические, типы данных даты и времени.

Существует тип данных, обычно называемый двоичным большим объектом (Binary Large OBject, BLOB), который позволяет хранить любые большие по объему данные — форматированные тексты, изображения, звук, видео. По мере развития программной отрасли в мире программного обеспечения появляются новые типы данных, например XML, или пространственные (spatial) типы данных. Все эти типы данных поддерживаются в системе MS SQL Server.

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

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

Для логического типа данных множеством допустимых значений в обычных языках программирования являются два значения: TRUE (истина) и FALSE (ложь). В реляционных базах данных используется еще одно значение NULL (неизвестное значение). Здесь применяется уже не обычная двухзначная, а трехзначная логика.

Для логического типа данных в реляционных базах данных применяются три логические операции: отрицание (операция NOT), дизъюнкция (логическое ИЛИ, OR) и конъюнкция (логическое И, AND).

ЗАМЕЧАНИЕ
Использование трехзначной логики в реляционных базах данных связано с присутствием среди значений столбцов и неизвестного, или неопределенного, значения NULL.

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

Порядок сортировки

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

Порядок сортировки также задает способ, правила, упорядочения строковых данных. Он определяет не только лексикографический порядок, т. е. упорядочение значений по алфавиту, но и некоторые другие характеристики упорядочения. Например, в нем задается расположение в отсортированном результате разделителей (точка, запятая, двоеточие и др.), порядок для прописных и строчных букв, чувствительность к регистру и ряд других. В стандарте SQL порядок сортировки еще называется символьным репертуаром (character repertoire) Порядок сортировки может задаваться на уровне сервера, базы данных и отдельных строковых столбцов таблиц.

ЗАМЕЧАНИЕ
В некоторых системах управления базами данных используется два понятия — набор символов (character set) и порядок сортировки (collation, collation order). Набор символов определяет, какие символы хранятся в соответствующем элементе данных. Порядок сортировки применим к конкретному набору символов, он определяет, в каком порядке сортируются символы. Один набор символов обычно имеет несколько порядков сортировки.

Неизвестное значение NULL

Среди значений, которые может принимать столбец, в реляционных базах данных также используется и пустое или неизвестное значение NULL. Не стоит смешивать его с нулевым значением у числового столбца или строкой с нулевой длиной для строкового типа данных. Такое значение присваивается тем столбцам, реальные значения которых нам не известны или которые в принципе неприменимы для конкретного объекта. Примером может служить дата рождения, которая часто требуется при описании какого-либо человека. Иногда бывает так, что эта дата нам просто не известна. При этом большинство задач обработки данных может решаться и при отсутствии таких данных. В этом случае полю присваивается значение NULL

Другой пример — серия и номер паспорта человека. Если у него еще нет паспорта, то такое значение будет неопределенным. Еще случай, когда опять же при описании людей в таблице существует столбец отчества. У некоторых национальностей в принципе не бывает отчеств (например, у американцев). Здесь также элементу данных присваивается значение NULL (по правде говоря, в этом случае полю можно было бы просто присвоить и пустую строку нулевой длины).

При использовании в базах данных неизвестного значения возникают некоторые вопросы по их применению. Какой результат нужно присвоить операции сравнения, если одна из сравниваемых величин или обе имеют значение NULL? Разумным решением будет то, что результат нам также не известен, даже если оба сравниваемых столбца имеют значение NULL (не могут два неизвестных значения обязательно быть равными друг другу). В подобных сравнениях результатом не будет ни TRUE (истина) и ни FALSE (ложь), результатом будет значение NULL. Здесь и появляется необходимость в использовании трехзначной логики. Таблицы истинности для операций отрицания, дизъюнкции и конъюнкции в трехзначной логике будут рассмотрены в главе 4.

В языке SQL существует оператор IS NULL и функция ISNULL(), выполняющие проверку на неизвестное значение. Поскольку языки программирования используют (пока еще) двухзначную логику, то при работе с базами данных при сравнении значений столбцов до применения обычных операций сравнения регулярно используется функция ISNULL() или оператор IS NULL.

ЗАМЕЧАНИЕ
Вы можете увидеть в литературе критические замечания относительно использования в базах данных и вообще в программировании значения NULL. Я считаю, что не следует принимать близко к сердцу негодующие высказывания по этому поводу, даже если они исходят от известных специалистов в области программирования и баз данных.
Использование неизвестного значения в реальных разработках показало, что существует обоснованная потребность в подобном значении.

Индексы

Объект базы данных индекс (index) используется для отдельных таблиц. Для каждой таблицы можно создавать один кластерный (см. далее) и до 999 обычных индексов. В таблице выбирается столбец или несколько столбцов, по которым формируется индекс. В результате в базе данных на внешнем носителе создается упорядоченная структура, которая будет содержать значения индексированных столбцов для каждой строки таблицы.

Индексы позволяют ускорить процесс выборки данных из таблицы и процесс упорядочивания выбранных данных. Индексы также могут быть использованы для обеспечения уникальности значений столбцов, входящих в состав индекса. Можно создавать так называемые кластерные индексы. Такие индексы в самых нижних узлах своей структуры содержат и строки таблицы. В таблице может быть только один кластерный индекс. Кластерные индексы позволяют увеличить скорость выборки отдельных строк таблицы из базы данных. Не имеющая кластерного индекса таблица называется кучей (heap).

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

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

Похожие новости

Комментариев 0

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