Таблица в реляционной базе данных во многом похожа на обычную таблицу на бумаге: она состоит из строк и столбцов. Количество и порядок столбцов фиксированы, и каждый столбец имеет имя. Количество строк является переменным — оно отражает объем данных, хранящихся в данный момент времени. SQL не гарантирует определенный порядок строк в таблице. При чтении таблицы строки будут выводиться в неопределенном порядке, если только сортировка не указана в явном виде. Это рассматривается в Глава 2.4. Кроме того, SQL не присваивает строкам уникальные идентификаторы, поэтому в таблице возможно наличие нескольких полностью идентичных строк. Это является следствием математической модели, лежащей в основе SQL, что обычно нежелательно. Далее в этой главе мы рассмотрим, как решить данную проблему.
Каждый столбец имеет тип данных. Тип данных ограничивает набор возможных значений, которые могут быть присвоены столбцу, и определяет семантику данных, хранящихся в столбце, для их использования в вычислениях. Например, столбец, объявленный с использованием типа numeric, не будет принимать произвольные текстовые строки, а данные, хранящиеся в таком столбце, могут быть использованы для математических вычислений. Напротив, столбец, объявленный как тип символьной строки, будет принимать практически любые данные, но он не подходит для математических расчетов, хотя для него доступны другие операции, такие как конкатенация строк.
Digital Q.DataBase включает в себя обширный набор встроенных типов данных, подходящих для большинства приложений. Пользователи также могут определять собственные типы данных. Большинство встроенных типов данных имеют очевидные имена и семантику, поэтому подробное описание приводится в Глава 2.5. Некоторые из наиболее часто используемых типов данных:
тип данных integer для целых чисел, тип numeric для
чисел, которые могут быть дробными, текст для символьных
строк, date для дат, time для
значений времени суток и timestamp для значений,
содержащих как дату, так и время.
Для создания таблицы используется команда с подходящим названием CREATE TABLE . В этой команде указывается как минимум имя новой таблицы, имена столбцов и тип данных каждого столбца. Например:
CREATE TABLE my_first_table (
first_column text,
second_column integer
);
Так создаётся таблица с именем my_first_table с
двумя столбцами. Первый столбец имеет имя
first_column и тип данных
текст; второй столбец имеет имя
second_column и тип тип данных integer.
Имена таблиц и столбцов соответствуют синтаксису идентификаторов, описанному
в Раздел 2.1.1.1. Имена типов обычно также являются идентификаторами, но существуют некоторые исключения. Обратите внимание, что список столбцов разделяется запятыми и заключается в скобки.
Разумеется, предыдущий пример был весьма искусственным. Как правило, таблицам и столбцам следует давать имена, которые отражают характер хранящихся в них данных. Рассмотрим более реалистичный пример:
CREATE TABLE products (
product_no integer,
name text,
price numeric
);
(Тип тип numeric тип numeric может хранить дробную часть, что характерно для денежных сумм.)
При создании множества взаимосвязанных таблиц рекомендуется придерживаться единого стиля именования таблиц и столбцов. Например, при выборе имен таблиц можно использовать существительные в единственном или множественном числе; оба этих подхода имеют своих сторонников среди теоретиков.
Количество столбцов в таблице ограничено. В зависимости от типов данных это ограничение составляет от 250 до 1600. Тем не менее, создание таблиц с подобным количеством столбцов встречается крайне редко и зачастую является признаком неэффективного проектирования.
Если таблица больше не нужна, её можно удалить, используя DROP TABLE команду. Например:
DROP TABLE my_first_table; DROP TABLE products;
Попытка удаления несуществующей таблицы приводит к ошибке. Тем не менее, в файлах SQL-скриптов часто принято безусловно пытаться удалить каждую таблицу перед её созданием, игнорируя сообщения об ошибках, чтобы скрипт работал независимо от того, существует таблица или нет. (При желании можно использовать DROP TABLE IF EXISTS вариант
во избежание вывода сообщений об ошибках, однако это не входит в стандарт SQL.)
Если необходимо изменить уже существующую таблицу, см. раздел Раздел 2.2.7 далее в этой главе.
С помощью инструментов, рассмотренных до настоящего момента, можно создавать полнофункциональные таблицы. Остальная часть этой главы посвящена добавлению функциональности в определение таблицы для обеспечения целостности данных, безопасности или удобства. Если вы хотите немедленно заполнить таблицы данными, можно перейти к разделу Глава 2.3 и прочитать оставшуюся часть этой главы позже.