Проектирование таблиц базы данных.
После того как исходную структуру БД мы привели к третьей нормальной форме, у нас получилось в сумме четыре таблицы:
Таблица 1
AngPROGRAMMA | ||
Название поля | Тип данных | Правило целостности |
nazvanie | VARCHAR2(20) | PRIMARY KEY |
firma | VARCHAR2(20) | FOREIGN KEY AngPROIZVODITEL |
tip | VARCHAR2(20) | |
podderjka | VARCHAR2(20) |
В таблице 1 будет храниться информация о программах. Эта таблица имеет следующие поля:
nazvanie – первичный ключ таблицы - должен быть уникальным;
firma – определяет фирму программы;
tip – определяет тип программы (текстовый редактор, СУБД и т.п.);
podderjka – определяет поддержку тех или иных продуктов.
Используемые типы данных:
VARCHAR2(L) - символьные данные фиксированной длины L байт.
Таблица 2
AngPROIZVODITEL | ||
Название поля | Тип данных | Правило целостности |
firma | VARCHAR2(20) | PRIMARY KEY |
strana | VARCHAR2(20) | |
svyaz | NUMBER |
В таблице 2 будет храниться информация о производителях. Эта таблица имеет следующие поля:
firma-первичный ключ таблицы- должен быть уникальным;
strana – страна-производитель;
svyaz – информация для связи с фирмой.
Используемые типы данных:
VARCHAR2(L) - символьные данные фиксированной длины L байт;
NUMBER - число.
Таблица 3
AngVERSIYA | ||
Название поля | Тип данных | Правило целостности |
nazvanie | VARCHAR2(20) | PRIMARY KEY FOREIGN KEY AngPROGRAMMA |
versiya | NUMBER | PRIMARY KEY |
naznachenie | VARCHAR2(20) | |
dataV | NUMBER | |
stoimost | NUMBER | stoimost>0 |
В таблице 3 будет храниться информация о версиях программы. Эта таблица имеет следующие поля:
nazvanie – первичный ключ таблицы - должен быть уникальным;
versiya – первичный ключ таблицы - должен быть уникальным;
naznachenie – определяет назначение программы;
dataV – определяет год выпуска программы;
stoimost-определяет стоимость продукта, определенно больше ноля.
Используемые типы данных:
VARCHAR2(L) - символьные данные фиксированной длины L байт;
NUMBER - число.
Таблица 4
AngTEXNXARAKT | ||
Название поля | Тип данных | Правило целостности |
nazvanie | VARCHAR2(20) | PRIMARY KEY FOREIGN KEY AngVERSIYA |
versiya | NUMBER | PRIMARY KEY FOREIGN KEY AngVERSIYA |
tipSistTreb | VARCHAR2(20) | PRIMARY KEY |
znachenieSistTreb | NUMBER | |
yazik | VARCHAR2(20) |
В таблице 4 будет храниться информация о технических характеристиках программы. Эта таблица имеет следующие поля:
nazvanie – первичный ключ таблицы - должен быть уникальным;
versiya – первичный ключ таблицы - должен быть уникальным;
tipSistTreb – первичный ключ таблицы - должен быть уникальным;
znachenieSistTreb – определяет значение каждого системного требования программы;
yazik -определяет язык программы.
Используемые типы данных:
VARCHAR2(L) - символьные данные фиксированной длины L байт;
NUMBER - число.
Реализация серверной части.
Создание таблиц.
Запросы SQL для создания таблиц выглядят следующим образом:
CREATE TABLE AngPROGRAMMA
(nazvanie VARCHAR2(20) CONSTRAINT pkluch_nazvanie PRIMARY KEY,
firma VARCHAR2(20) CONSTRAINT fkluch_firma REFERENCES AngPROIZVODITEL(firma),
tip VARCHAR2(20),
podderjka VARCHAR2(20))
CREATE TABLE AngPROGRAMMA - данный запрос создаёт таблицу ПРОГРАММА.
Далее в скобках указывается, из каких полей будет состоять данная таблица и какой тип данных каждого из полей:
поле nazvanie является первичным ключом и имеет тип VARCHAR2(20), т.е. строка длиною 20 символов;
поле firma является вторичным ключом, т.е. ссылка на соответствующее поле таблицы 2, и имеет тип данных VARCHAR2(20), т.е. строка длиною 20 символов;
поле tip имеет тип VARCHAR2(20), т.е. строка длиною 20 символов;
поле podderjka имеет тип данных VARCHAR2(20), т.е. строка длиною 20 символов.
Некоторые поля требуют установления ограничений целостности с помощью ключевого слова CONSTRAINT:
PRIMARY KEY – первичный ключ;
CHECK (<ЛВ>) – ограничение поля, где ЛВ – логическое выражение, определяющее это ограничение;
REFERENCES <ИТ> (<ПК>) – внешний ключ для связи с таблицей <ИТ> по ключу <ПК>;
FOREIGN KEY – вторичный ключ, т.е. ссылка на соответствующее поле другой таблицы.
Если таких полей несколько, то они перечисляются в скобках через запятую после ключевого слова CONSTRAINT и указанного ограничения целостности. Данная операция проводится после перечисления полей. Пример в таблицах 3 и 4.
Остальные таблицы создаются аналогично:
CREATE TABLE AngPROIZVODITEL
(firma VARCHAR2(20) CONSTRAINT pkluch_firma PRIMARY KEY,
strana VARCHAR2(20),
svyaz NUMBER)
CREATE TABLE AngVERSIYA
(nazvanie VARCHAR2(20) CONSTRAINT fkluch_nazvanie REFERENCES AngPROGRAMMA(nazvanie),
versiya NUMBER,
naznachenie VARCHAR2(20),
dataV NUMBER,
stoimost NUMBER(5) CONSTRAINT ch_stoimost CHECK (stoimost>0),
CONSTRAINT pkluch_AnzVERSIYA PRIMARY KEY (nazvanie,versiya))
CREATE TABLE AngTEXNXARAKT
(nazvanie VARCHAR2(20),
versiya NUMBER,
tipSistTreb VARCHAR2(20),
znachenieSistTreb NUMBER,
yazik VARCHAR2(20),
CONSTRAINT pkluch_AngTEXNXARAKT PRIMARY KEY (nazvanie,versiya,tipSistTreb),
CONSTRAINT fkluch_nazvanie_versiya FOREIGN KEY(nazvanie,versiya)
REFERENCES AngVERSIYA(nazvanie,versiya))
В ответ на данные запросы мы получим ответ сервера в виде фразы:
TABLE CREATED – таблица создана.
Запросы SQL для удаления таблиц выглядят следующим образом:
DROP TABLE AngTEXNXARAKT.
Для изменения данных в полях используется команда ALTER TABLE c добавлением фразы MODIFY, она изменяет следующие значения столбца: тип данных, размер, умалчиваемое значение, ограничение столбца NOT NULL. Во фразе MODIFY достаточно специфицировать имя столбца и модифицируемую часть определения.
Например:
Изменить стоимость программ с пятизначного числа на четырехзначное.
ALTER TABLE AngVERSIYA
MODIFY (stoimost NUMBER(4))
Для добавления нового столбца в таблицу используется команда ALTER TABLE c добавлением фразы ADD.
Например:
Добавить ограничение стоимости программ не равной нулю.
ALTER TABLE AngVERSIYA
ADD (CONSTRAINT nn_Stoimost NOT NULL Stoimost)
Работа с данными.
Запросы SQL на заполнение таблиц данными выглядят следующим образом.
Заполнение данными таблицы AngPROGRAMMA:
Для заполнения таблицы сначала вводится команда INSERT INTO, затем название таблицы, которую будем заполнять данными. В скобках перечислим название всех полей таблицы.
INSERT INTO AngPROGRAMMA (nazvanie,firma,tip,podderjka)
Затем используется команда VALUES, где в скобках, в кавычках через запятую указываются значения полей:
INSERT INTO AngPROGRAMMA (nazvanie,firma,tip,podderjka)
VALUES('WINDOWS','MICROSOFT','OC','MICROSOFT.RU')
INSERT INTO AngPROGRAMMA (nazvanie,firma,tip,podderjka)
VALUES('STUDENT','TRIADA','game','TRIADA.RU')
INSERT INTO AngPROGRAMMA (nazvanie,firma,tip,podderjka)
VALUES('MACINTOUCH','APPLE','OC','APPLE.RU')
INSERT INTO AngPROGRAMMA (nazvanie,firma,tip,podderjka)
VALUES('DELPHI','BORLAND','PL','BORLAND.RU')
INSERT INTO AngPROGRAMMA (nazvanie,firma,tip,podderjka)
VALUES('WEBCAMERA','TOSHIBA','camera','TOSHIBA.RU')
INSERT INTO AngPROGRAMMA (nazvanie,firma,tip,podderjka)
VALUES('NMAP','LINUX','SS','LINUX.RU')
Заполнение таблицы AngPROIZVODITEL:
INSERT INTO AngPROIZVODITEL(firma,strana,svyaz)
VALUES('MICROSOFT','USA',1234567)
INSERT INTO AngPROIZVODITEL(firma,strana,svyaz)
VALUES('TRIADA','Germany',7654321)
INSERT INTO AngPROIZVODITEL(firma,strana,svyaz)
VALUES('APPLE','ENGLAND',9876543)
INSERT INTO AngPROIZVODITEL(firma,strana,svyaz)
VALUES('BORLAND','USA',3456789)
INSERT INTO AngPROIZVODITEL(firma,strana,svyaz)
VALUES('TOSHIBA','Japan',5678900)
INSERT INTO AngPROIZVODITEL(firma,strana,svyaz)
VALUES('LINUX','USA',9119119)
Остальные таблицы заполняются аналогично.
Для изменения данных используется команда UPDATE, которая изменяет значения столбцов в таблице.
Пример 1:
Изменить дату выпуска путем увеличения на 2 только тех версий программ, стоимость которых меньше 10000 рублей.
UPDATE AngVERSIYA SET dataV=dataV+2
WHERE stoimost<10000
Пример 2:
Изменить язык программы на немецкий только тех программ, у которых хотя бы одно значение системных требований меньше 500.
UPDATE AngTEXNXARAKT SET yazik=german
WHERE znachenieSistTreb<500
Для удаления данных используется команда DELETE, которая удаляет значения столбцов в таблице.
Например:
Удаление данных тех программ, которые одновременно удовлетворяют двум условиям: версия программы меньше 5 и стоимость не превышает 8000.
DELETE FROM AngVERSIYA
WHERE versiya<5 AND stoimost<8000
Для выборки данных используется команда SELECT.
Пример 1:
Получить все сведения о программах, хранящихся в базе.
SELECT * FROM AngPROGRAMMA
Пример 2:
Получить названия программ, отсортированных по году выпуска.
SELECT nazvanie FROM AngVERSIYA
ORDER BY dataV
Пример 3:
Определить суммарную стоимость тех программ, которые выпущены не позднее 2005 года.
SELECT SUM(stoimost) FROM AngVERSIYA
WHERE dataV>2005
Пример 4:
Определить все программы, названия которых содержат комбинацию "NT".
SELECT nazvanie FROM AngPROGRAMMA
WHERE nazvanie LIKE '%NT%'
Пример 5:
Представить сведения о программах в виде: название программы, её стоимость; выполнив при этом суммирование стоимости программ с одним названием. Вывести сведения только о тех программах, суммарная стоимость которых больше 10000 рублей.
SELECT nazvanie SUM(stoimost) FROM AngPROGRAMMA, AngVERSIYA
WHERE AngPROGRAMMA. Nazvanie= AngVERSIYA. Nazvanie
GROUP BY nazvanie. AngPROGRAMMA
HAVING SUM(stoimost)>10000