Ключевые слова

Тесты

Заключение

 

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

 

Ø развитый набор предопределенных типов, включая ряд параметризованных типов;

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

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

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

 

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

 

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

 

 

1 (1) Что представляют собой значения типа NUMERIC (10, 2)?

 

(a) -

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

(б) +

точные числа из 12 десятичных цифр с двумя цифрами после десятичной точки

(в) -

точные числа из 10 десятичных цифр с двумя цифрами после десятичной точки

 

1 (2) Пусть в некоторой таблице определен столбец типа CHARACTER (7). Какая символьная строка будет реально храниться в этом столбце некоторой строки таблицы, если при вставке строки в качестве значения этого была указана литеральная константа ‘test’?

 

(а) -

“test”

(б) +

“testVVV”, где “V” – символ пробела

(в) -

“testX’000000”

 

1 (3) Пусть в некоторой таблице определен столбец типа VARCHAR (7). Какая символьная строка будет реально храниться в этом столбце некоторой строки таблицы, если при вставке строки в качестве значения этого была указана литеральная константа ‘test’?

 

(а) +

“test”

(б) -

“testVVV”, где “V” – символ пробела

(в) -

“testX’000000”

 

1 (4) Какая из приведенных ниже таблиц является таблицей истинности для логической функции “штрих Шеффера” в трехзначной логике?

 

(а) +

? TRUE FALSE UNKNOWN
TRUE FALSE TRUE UNKNOWN
FALSE TRUE TRUE TRUE
UNKNOWN UNKNOWN TRUE UNKNOWN

 

(б) -

AND TRUE FALSE UNKNOWN
TRUE TRUE FALSE UNKNOWN
FALSE FALSE FALSE FALSE
UNKNOWN UNKNOWN FALSE UNKNOWN

 

(в) -

AND TRUE FALSE UNKNOWN
TRUE TRUE FALSE FALSE
FALSE FALSE TRUE FALSE
UNKNOWN FALSE FALSE UNKNOWN

 

2 (1) Пусть в некоторой таблице определен столбец типа INTEGER ARRAY [10]. Пусть при вставке в эту таблицу некоторой строки в данный столбец заносится значение-массив, в котором задан только десятый элемент. Будет ли выполнена эта операция, какая память будет отведена для хранения этого массива, и что реально в ней будет содержаться?

 

(а) -

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

 

(б) -

операция выполнена не будет, поскольку не заданы начальные элементы массива

 

(в) +

операция будет выполнена, будет выделена память для хранения десяти элементов массива, в первых девяти будут содержаться неопределенные значения, а в последнем – значение десятого элемента

 

2 (2) Пусть в некоторой таблице определен столбец типа INTEGER ARRAY [10]. Пусть при вставке в эту таблицу некоторой строки в данный столбец заносится значение-массив (12, 14, 18, 22). Чему будет равно значение cs для значения-массива данного столбца в этой строке после занесения в него восьмого элемента массива?

 

(а) -

(б) -

(в) +

 

2 (3) Какова степень анонимного строчного типа ROW (a INTEGER, b ROW (C INTEGER, C CHARACTER (7)))?

 

(а) +

(б) -

(в) -

 

2 (4) Какова максимальная кардинальность типа INTEGER ARRAY [10] ARRAY [10]?

 

(а) -

(б) +

(в) -

 

3 (1) Пусть имеется следующее определение домена:

 

CREATE DOMAIN TEST AS INTEGER

DEFAULT 100

CHECK (VALUE > 0 AND VALUE != 150 AND VALUE < 200)

CONSTRAINT (VALUE IS NOT NULL);

 

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

 

(а) -

(б) +

NULL

(в) -

 

3 (2) Пусть имеется следующее определение домена:

 

CREATE DOMAIN TEST AS INTEGER

DEFAULT 100

CHECK (VALUE > 10 AND VALUE != 150
AND VALUE != 190 AND VALUE < 200);

 

Пусть на этом домене определен столбец некоторой таблицы. Предположим, что в некоторый момент времени значениями данного столбца в строках таблицы являются значения {100, NULL, 160}. Пусть после этого выполняется оператор

 

ALTER DOMAIN TEST SET DEFAUL 180
ADD CHECK (VALUE IS NOT NULL);

 

Что произойдет при выполнении оператора?

 

(а) -

имеющиеся значения столбца не изменятся

(б) +

оператор будет отвергнут

(в) -

значение 100 изменится на значение 180

 

3 (3) Пусть имеется следующее определение домена:

 

CREATE DOMAIN TEST AS INTEGER

DEFAULT 100

CHECK (VALUE > 0 AND VALUE != 150 AND VALUE < 200)

CONSTRAINT (VALUE IS NOT NULL);

 

Пусть на этом домене определен столбец некоторой таблицы. Предположим, что в некоторый момент времени значениями данного столбца в строках таблицы являются значения {100, 120, 160}. Пусть после этого выполняется оператор

 

DROP DOMAIN TEST

 

Что произойдет при выполнении оператора?

 

(а) +

имеющиеся значения столбца не изменятся

(б) -

оператор будет отвергнут

(в) -

значение 100 изменится на значение NULL

 

4 (1) Пусть имеется литерал типа символьных строк ‘12251999’. При выполнении какого из следующих операторов CAST будет зафиксирована ошибка?

 

(а) -

CAST ‘12251999’ AS NUMERIC (8)

(б) -

CAST ‘12251999’ AS VARCHAR (8)

(в) +

CAST ‘12251999’ AS DATE (8)

 

4 (2) Пусть имеется литерал точного числового типа 22519. При выполнении какого из следующих операторов CAST будет зафиксирована ошибка?

 

(а) -

CAST 22519 AS NUMERIC (8)

(б) -

CAST 22519 AS FLOAT (8)

(в) +

CAST 22519 AS CHARACTER (4)

 

4 (3) Пусть имеется литерал 123E12. При выполнении какого из следующих операторов CAST будет зафиксирована ошибка?

 

(а) +

CAST 123E12 AS NUMERIC (8)

(б) +

CAST 123E12 AS CHARACTER (4)

(в) -

CAST 123E12 AS FLOAT (8)

 

Лекция 12. Язык баз данных SQL: средства определения базовых таблиц и ограничений целостности

 

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

 

 

Базовая таблица, мультимножество строк, операторы CREATE TABLE, ALTER TABLE и DROP TABLE, определение столбца, значения столбца по умолчанию, ограничения целостности столбца, ограничение NOT NULL, ограничение первичного ключа, ограничение возможного ключа, определение внешнего ключа на уровне столбца, проверочное ограничение на уровне столбца, определение табличного ограничения, табличное ограничение первичного или возможного ключа, проверочное табличное ограничение, табличное ограничение внешнего ключа, способы сопоставления значений внешнего и возможного ключей, ссылочные действия, добавление, изменение или удаление определения столбца, изменение набора табличных ограничений, общие ограничения целостности, операторы CREATE ASSERTION и DROP ASSERTION, немедленная и откладываемая проверка ограничений, оператор SET CONSTRAINTS.