Предыдущая лекция | Содержание | Следующая лекция
Программирование. Лекция №1. Определение данных.

Информационные системы


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

СУБД (Система Управления Базой Данных)


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

Основные понятия и определения


Основными понятиями являются:

Сущность - это реальный или представляемый объект, информация о котором должна сохраняться и быть доступна. В диаграммах ER-модели сущность представляется в виде прямоугольника, содержащего имя сущности. При этом имя сущности - это имя типа, а не некоторого конкретного экземпляра этого типа. Для большей выразительности и лучшего понимания имя сущности может сопровождаться примерами конкретных объектов этого типа.
Ниже изображена сущность (точнее, тип сущности) АЭРОПОРТ с примерными объектами Шереметьево и Хитроу:



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

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

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

Пример связи "один ко многим" - Фамилия - Человек. Фамилия Иванов одна, а людей с такой фамилией - много.
Пример связи "многие ко многим" - Врачи - Пациенты.
Рассмотрим пример связи "многие к одному" необязательную с одного конца. Связь между сущностями БИЛЕТ и ПАССАЖИР связывает билеты и пассажиров. При том конец сущности с именем "для" позволяет связывать с одним пассажиром более одного билета, причем каждый билет должен быть связан с каким-либо пассажиром. Конец сущности с именем "имеет" означает, что каждый билет может принадлежать только одному пассажиру, причем пассажир не обязан иметь хотя бы один билет.



Лаконичной устной трактовкой изображенной диаграммы является следующая:


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

Пример:



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

Модель данных - способ отражения сущностей, атрибутов сущностей и их связей.

Введение



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

Ниже перечислены основные предложения логического определения данных:

CREATE TABLE CREATE VIEW CREATE INDEX
ALTER TABLE
DROP TABLE DROP VIEW DROP INDEX

В курсе лекций также рассматриваются различные предложения SQL, такие как DELETE, INSERT, UPDATE. А также, самое главное предложение SQL - SELECT.

Базовые таблицы



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

Определение


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

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

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

Предложение CREATE TABLE


Теперь мы подробно обсудим предложение CREATE TABLE. Это предложение имеет следующий общий формат:

CREATE TABLE имя_базовой_таблицы 
      (определение_столбца [, определение_столбца] ... )
      [другие параметры];

Здесь "определение_столбца" в свою очередь имеет формат:
       имя_столбца тип_данных [NOT NULL]

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

Рассмотрим пример предложения CREATE TABLE для таблицы Поставщики:
    create table Поставщики
     (Номер_Поставщика     int,
      Фамилия              char(20),
      Город                char (15));

Результат этого предложения состоит в том, что создается новая пустая базовая таблица, названная xyz. Поставщики, где xyz-имя, под которым известен системе пользователь, издающий предложение CREATE TABLE. В системный каталог при этом помещается статья, описывающая эту таблицу. Пользователь xyz может обращаться к таблице по ее полному имени xyz. Поставщики или по сокращенному имени Поставщики. Другие пользователи должны обращаться к ней только по ее полному имени. Данная таблица состоит из трёх столбцов с именами xyz.Поставщики.НОМЕР_ПОСТАВЩИКА, xyz.Поставщики.ФАМИЛИЯ xyz.Поставщики.ГОРОД, имеющих указанные в определении типы данных. (Типы данных будут рассматриваться ниже). Пользователь xyz может обращаться к этим столбцам по их полным или по сокращенным именам: Поставщики.HOMEP-ПОСТАВЩИКА, Поставщики.ФАМИЛИЯ и Поставщики.ГОРОД. Другие пользователи должны применять только полные имена столбцов. Заметим, однако, что независимо от того, включается ли в имя часть "xyz", часть "Поставщики" может быть опущена, если это не приводит к двусмысленности, но ее включение никогда не является ошибкой. Вообще относительно имен справедливы следующие правила. Имена пользователей, например xyz, являются уникальными во всей системе. Имена таблиц (неуточненные) уникальны для пользователя. Имена столбцов (неуточненные) уникальны для таблицы.

Кроме того, в качестве имен не могут использоваться ключевые слова языка SQL (CREATE, TABLE, SELECT и т. д.). Первая литера любого имени должна быть буквой ( А-Z или одной из специальных литер #, $, @), а остальные литеры - буквами, цифрами (0-9) или знаком подчеркивания. Имена таблиц и столбцов могут содержать максимум 18 литер, а имена пользователей - максимум 8 литер. Под "таблицей" здесь понимаются как базовые таблицы, так и представления. Таким образом, представление не может иметь такое же имя, как и базовая таблица. После того как таблица создана, в нее могут быть введены данные с помощью предложения INSERT (вставить) языка SQL. Вариант заполненной таблицы Поставщики.

Типы данных


INTEGER двоичное целое число, занимающее полное машинное слово, 31 бит со знаком
SMALLINT двоичное целое число, занимающее полуслово, 15 бит со знаком
DECIMAL (p,q) упакованное десятичное число, включающее р цифр и знак (0 < р < 16); предполагается q цифр справа от десятичной точки (q < р; если q = 0, она может быть опущена)
FLOAT число n с плавающей точкой, занимающее двойное слово и представленное шестнадцатеричной мантиссой f с точностью до 15 знаков (-1 < f < +1) и двоичным целочисленным порядком е (-65<е < +64) таким образом, что n= = f* (16 * * е); примерный диапазон значений2 n - от 5.4Е-79 до 7.2Е + 75; см. также ниже пояснения для констант типа FLOAT
CHAR (n) литерная строка фиксированной длины из n литер (О < n < 255)
VARCHAR (n) литерная строка переменной длины, не превышающей n литер (0 < n; максимальное значение n зависит от ряда факторов, но в общем случае должно быть меньше, чем "размер страницы" - 4К либо 32К - пространства, содержащего данную таблицу) (Если n>254, то поле является и "длинным полем", и объектом строгих ограничений. Длинные поля предназначены для того, чтобы иметь дело с данными в свободном формате, такими, как длинные текстовые строки, а не с простыми форматизированными данными, например номер поставщика или объем поставки. По существу, единственной операцией, в которой могут в качестве операндов использоваться такие поля, является операция присваивания базе данных (INSERT или UPDATE) либо из базы данных (SELECT). He допускаются какие-либо операции, которые предполагают сравнение с длинным полем. Поэтому, например, длинные поля не могут быть индексированными, на них нельзя ссылаться во фразах WHERE, GROUP BY или ORDER BY и т. п.)
Числовые типы
Числовые типы позволяют хранить числовые данные (целые числа, действительные числа и числа с плавающей точкой), представлять величины и выполнять вычисления.

BINARY-INTEGER

Тип данных BINARY-INTEGER используется для представления целых чисел со знаком. Диапазон его значений: -2147483647 ..2147483647. Значения BINARY-INTEGER требуют для своего хранения меньше памяти, чем значения типа NUMBER.

NUMBER

Тип данных NUMBER используется для представления чисел с фиксированной или плавающей точкой практически любого размера. Диапазон абсолютной величины его значений: 1 .0Е-130 .. 9.99Е125. Для значений этого типа вы можете указать также точность, т.е. общее число значащих цифр, и масштаб, который определяет, с какого разряда после десятичной точки начинается округление. Спецификация типа имеет следующий синтаксис:
        NUMBER[(точность,   масштаб)]

При объявлении переменной, предназначенной для хранения чисел с фиксированной точкой, обязательно указывается масштаб, и спецификация типа должна иметь следующую форму:
        NUMBER(точность,   масштаб)

При объявлении переменной, предназначенной для хранения чисел с плавающей точкой, нельзя указывать точность или масштаб, поскольку десятичная точка "плавает" (и может занять любую позицию); в этом случае спецификация типа должна иметь следующую форму:
        NUMBER

При объявлении переменной, предназначенной для хранения целых чисел, которые не имеют десятичной точки, спецификация типа должна иметь следующую форму:
        NUMBER(точность)     --  то же  самое,   что и NUMBER(точность,0)

Для указания точности и масштаба нельзя использовать константы или переменные - они должны быть заданы целочисленными литералами. Максимальная точность чисел типа NUMBER - 38 десятичных разрядов. Если точность не указана, по умолчанию она будет установлена равной 38 или максимально возможному для вашей системы значению, если оно меньше 38.
Масштаб может быть задан любым числом в диапазоне от -84 до 127 и определяет, с какого разряда после десятичной точки начинается округление. Например, при масштабе, равном 2, округление будет производиться до ближайших сотых (вместо 3.456 будет 3.46). Масштаб может быть отрицательным, что вызовет округление в разрядах слева от десятичной точки. Например, при масштабе, равном -3, округление будет производиться до ближайших тысяч (вместо 3456 будет 3000). При масштабе, равном нулю, округление происходит до ближайшего целого. Если масштаб не указан, по умолчанию он принимается равным нулю.

INTEGER

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

Символьные типы

Символьные типы позволяют хранить алфавитно-цифровые данные, представлять слова и текст, а также оперировать символьными строками.

CHAR

Тип данных CHAR используется для представления символьных данных фиксированной длины. Внутреннее представление символов зависит от установленной кодировки базы данных, которая может быть, например, 7-битовым кодом ASCII или кодовой страницей 500 для кода EBCDIC.
Спецификация типа данных CHAR имеет необязательный параметр, который позволяет указать максимальную длину до 32767 байтов. Спецификация имеет следующий синтаксис:
        CHAR[(максимальная  длина)]

Максимальную длину нельзя задавать константой или переменной -можно использовать только целочисленный литерал со значением в диапазоне 1 .. 32767.
Если максимальная длина не указана, по умолчанию она устанавливается равной 1. Обратите внимание, что максимальная длина переменной указывается в байтах, а не в символах. Таким образом, если переменная со спецификацией char (n) используется для хранения многобайтовых символов, то ее максимальная длина в символах будет меньше n. В базе данных максимальный размер столбца типа char не может превышать 2000 байтов. Поэтому в столбец типа char невозможно поместить значение типа char, если оно длиннее 2000 байтов.
Любое значение типа char (n) можно поместить в столбец базы данных, имеющий тип long, поскольку такой столбец может содержать значения с длиной до 2147483647 байтов, т.е. 2 гигабайтов. Однако вы не можете выбрать в переменную типа char (n) значение из столбца типа long, если оно длиннее 32767 байтов.

VARCHAR

Тип данных VARCHAR используется для представления символьных данных переменной длины. Внутреннее представление символов зависит от установленной кодировки базы данных, которая может быть, например, 7-битовым кодом ASCII или кодовой страницей 500 для кода EBCDIC.
Спецификация типа данных VARCHAR имеет обязательный параметр, который позволяет указать максимальную длину до 32767 байтов. Спецификация имеет следующий синтаксис:
         VARCHAR(максимальная длина)

Максимальную длину нельзя задавать константой или переменной - можно использовать только целочисленный литерал со значением в диапазоне 1 .. 32767.
Обратите внимание, что максимальная длина переменной указывается в байтах, а не в символах. Таким образом, если переменная со спецификацией VARCHAR (n) используется для хранения многобайтовых символов, то ее максимальная длина в символах будет меньше n. В базе данных максимальный размер столбца типа VARCHAR не может превышать 4000 байтов. Поэтому в столбец типа VARCHAR невозможно поместить значение типа VARCHAR, если оно длиннее 4000 байтов.
Любое значение типа VARCHAR (n) можно поместить в столбец базы данных, имеющий тип LONG, поскольку такой столбец может содержать значения с длиной до 2147483647 байтов. Однако вы не можете выбрать в переменную типа VARCHAR (n) значение из столбца типа LONG, если оно длиннее 32767 байтов.

Другие типы

BOOLEAN

Тип данных boolean используется для представления булевых значений true и false, а также пустого значения null, которое применяется в случаях, когда настоящее значение отсутствует, неизвестно или неприменимо. К переменным типа boolean могут применяться только логические операции.
Спецификация типа данных boolean не имеет никаких параметров. Переменной типа boolean могут быть присвоены только значения true и false, а также пустое значение null. Значения true и false нельзя поместить в столбец базы данных. Вы не можете также выбрать значение из столбца базы данных в переменную типа boolean.

Константы

Хотя это и в некоторой степени отступление от основной темы данной главы, сейчас удобно рассмотреть различные виды констант:
Целочисленная записывается как десятичное целое число со знаком или без знака, без десятичной точки; примеры: 4 -95 +364 0
Десятичная записывается как десятичное число со знаком или без знака, с десятичной точкой; примеры: 4,0 -95.7 +364.05 0.007
С плавающей точкой записывается как десятичная константа, за которой следует буква Е с последующей целочисленной константой; примеры: 4ЕЗ -95.7Е46 +364Е-5 0.7Е1 (примечание: выражение хЕу представляет значение х*(10**у))
Строковая записывается либо как строка литер, заключенная в одиночные кавычки, либо как строка пар шестнадцатиричных цифр, представляющих рассматриваемые литеры в коде EBCDIC, заключенная в одиночные кавычки, которой предшествует буква X; примеры: '123 Main St.' 'PIG' X'FlF2F340D481899540E2A34B' X'D7C9C7' (первый и третий примеры представляют одно и то же значение, так же как второй и четвертый)


Предложение ALTER TABLE


Точно так же, как в любое время можно с помощью предложения CREATE TABLE создать новую базовую таблицу, можно также в любое время изменить существующую базовую таблицу, добавляя к ней справа новый столбец. Для этого используется предложение ALTER TABLE:
   ALTER	TABLE	имя_базовой_таблицы
            ADD	    имя_столбца тип_данных ; 

Например:
ALTER	TABLE	Поставщики
	    ADD	    СКИДКА SMALLINT; 

Это предложение добавляет к таблице Поставщики столбец СКИДКА. Все существующие записи таблицы Поставщики расширяются с трёх значений полей данных до четырёх, и во всех случаях новое пятое поле принимает неопределенное значение. Спецификация NOT NULL в предложении ALTER TABLE не допускается. Заметим, между прочим, что только что описанное расширение существующих записей, не означает, что в это время физически обновляются записи в базе данных. Изменяется лишь хранимое в каталоге описание таблицы. Отдельные записи физически не изменяются до тех пор, пока они в следующий раз не станут целевыми для предложения UPDATE языка SQL.

Предложение DROP TABLE


Существующую базовую таблицу можно в любое время уничтожить с помощью предложения:
    DROP TABLE имя-базовой-таблицы;

Специфицированная базовая таблица удаляется из системы (точнее, из каталога удаляется описание этой таблицы). Автоматически удаляются также все индексы и представления, определенные над этой базовой таблицей.

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

Номер_Поставщика Фамилия Город
1 Смит Лондон
2 Джонс Париж
3 Блейк Париж
4 Кларк Лондон
5 Адамс Атенс

Номер_Поставщика Название Вес Цвет
1 гайка 12 красный
1 болт 15 зеленый
3 винт 17 голубой
4 винт 15 красный
4 шуруп 20 голубой
Hosted by uCoz