Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная 6 Создание базы данных.doc
Скачиваний:
1
Добавлен:
13.11.2019
Размер:
285.7 Кб
Скачать

Государственное образовательное учреждение

Высшего профессионального образования

Санкт-Петербургский государственный политехнический университет

Факультет технической кибернетики

Кафедра измерительных информационных технологий

УТВЕРЖДЕНО

На заседании кафедры ИИТ

Протокол №4

От «__» февраля 2009 г.

Лабораторная работа № 6

по курсам

«Базы данных»

«Системы управления базами данных»

«Управление данными»

Создание базы данных

Санкт-Петербург

2009

Цель лабораторной работы: создание реляционных баз данных с использованием SQL.

1. Теоретические сведения

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

Каждый атрибут таблицы должен иметь определенный тип данных.

CHAR(n)

VARCHAR(n)

- строка длиной ровно n битов

- строка длиной от 0 до n символов

BIT(n)

BIT VARING(n)

- битовая строка длиной ровно n битов

- битовая строка длиной от 0 до n битов

INT или INTEGER

SHORTINT

- целочисленные значения, аналогичные int языка С

- целочисленные, аналогичные short int языка С

FLOAT,REAL

DOUBLE PRESITION

- числа с плавающей точкой, аналогичные float.

- числа двойной точности, аналогичные double.

DECIMAL(n,d)

- действительное с фиксированной точкой, где n- общее число десятичных цифр, m-число цифр после точки.

DATE

- дата в формате ‘year-month-day’(например ‘1948-05-14’) или в другом формате, зависящем от реализации.

TIME

- время в формате hour:min:sec, например ’15:00:02.5’

Простейшая форма описания реляционного отношения использует ключевые слова CREATE TABLE. Например, требуется создать таблицу для отношения Actors(name,address,ampoule,gender,birthdate):

CREATE TABLE Actors( name CHAR(30),

address VARCHAR(255),

ampoule CHAR(30),

gender CHAR(1),

birthdate DATE);

при этом атрибут name и ampoule представляются строкой, длина которой равна 30 символам и заполняется при необходимости пробелами, атрибут address является строкой переменной длины, атрибут gender представляется символом и может иметь два значения ‘F’ и ‘M’ , атрибут birthdate представлен как дата.

Отношение может быть удалено из базы данных и помощью оператора удаления, например, DROP Actors.

Заполнение таблиц. Для заполнения таблицы, представляющей отношение R(A1,A2,…An), предназначены операторы вставки кортежей INSERT INTO R(A1,A2,…An) VALUES(V1,V2,…Vn), где V1,V2,…Vn – значения атрибутов. Если в список входят не все атрибуты, то недостающие принимают значение по умолчанию NULL. Например, требуется ввести сведения об артисте в отношение Actors:

INSERT INTO Actors(name,address,ampoule,gender,birthdate)

VALUES(‘Farukh Ruzimatov’,’ Saint Petersburg Nevsky st.150/15’,’principal dancer’,’M’, 1973-09-09)

Если все атрибуты обеспечены значениями, то в отношении можно не указывать атрибуты. При этом порядок атрибутов в списке должен совпадать с порядком атрибутов в отношении, например:

INSERT INTO Actors VALUES(‘Farukh Ruzimatov’,’ Saint Petersburg Nevsky st.150/15’,’principal dancer’,’M’, 1973-09-09)

Удаление кортежей. При заполнении таблиц некоторые данные могут быть введены ошибочно, и для корректировки требуется выполнить операции удаления. Операции удаления кортежей имеют следующий синтаксис DELETE FROM R WHERE <condition>.

Пусть, например, из отношения ActsIn(perfTitle,perfYear, theatre,actorName) требуется удалить информацию о том, что Farukh Ruzimatov участвовал в спектакле Giselle. Чтобы удалить соответствующий кортеж, необходимо его полностью описать, указать в списке все атрибуты кортежа:

DELETE FROM ActsIn

WHERE performTitle=’Giselle’

AND perfYear=1884

AND theatre=’Mariinsky’

AND actorName =’Farukh Ruzimatov’;

Используя проверку условия можно выполнить удаление из отношения Producers(name,address,сert#,networth) сразу все кортежи для режиссеров с годовым доходом, меньшим $1.000.000:

DELETE FROM Producers

WHERE netWoth<1000000;

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

Например, если при вводе или изменении кортежей отношения Actors(name,address,ampoule,gender,birthdate) значение атри­бута gender неизвестно, то будем вводить вместо него символ ‘?’, а если неизвестна дата рождения, будем вводить вместо нее ‘000-00-00’. Для этого в описании атрибутов используем запись:

gender CHAR(1) DEFAULT ‘?’

birthdate DATE DEFAULT DATE ‘0000-00-00’

Изменения реляционных схем данных в SQL. В некоторых случаях требуется изменить схему отношения, добавить или удалить атрибуты. Изменить схему отношения можно с помощью оператора, содержащего ключевые слова ALTER TABLE и следующие операторы, уточняющие, какие именно изменения требуются добавление ADD или удаление DROP. Например, требуется изменить отношение Actors (name,address,ampoule, gender,birthdate), введя в него новый атрибут phone и удалив атрибут birthdate. Для этого запишем предложение:

ALTER TABLE Actors ADD phone CHAR(16)

ALTER TABLE Actors DROP birthdate

Области значений атрибутов. Для каждого атрибута вместо указания типа данных можно указать область значений. Область значений может включать описание типа атрибутов, их значения по умолчанию и ограничения значений. Множество атрибутов могут иметь одинаковые области значений. Описание области значений имеет вид: CREATE DOMAIN <имя области> AS <описание типа>.

Определим область значений TheatreDomain для названия спектаклей в отношениях Performances(title,year, runningTime,type,theatreName, composer,producerC#) и ActsIn(perfTitle,perfYear,perfTheatre,actorName).

Определение области имеет вид:

CREATE DOMAIN TheatreDomain AS VARCHAR(50) DEFAULT ‘unknown’.